Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#和ASP.NET MVC中使用存储过程_C#_Sql Server_Asp.net Mvc_Stored Procedures_Ef Database First - Fatal编程技术网

在C#和ASP.NET MVC中使用存储过程

在C#和ASP.NET MVC中使用存储过程,c#,sql-server,asp.net-mvc,stored-procedures,ef-database-first,C#,Sql Server,Asp.net Mvc,Stored Procedures,Ef Database First,我有一个ASP.NETMVC应用程序,它使用EF模型(数据库优先方法)。我有SQL Server中定义的存储过程,需要在应用程序中使用。我以前从未这样做过,任何关于这方面的指导都将不胜感激。我确实添加了存储过程并为其创建了函数,但不知道如何将其添加到控制器和视图中。对于下面提供的代码,我只想添加一张卡 存储过程: CREATE PROCEDURE [dbo].[CreateLoyaltyCards] @NumberOfCards AS integer, @CustomerID

我有一个ASP.NETMVC应用程序,它使用EF模型(数据库优先方法)。我有SQL Server中定义的存储过程,需要在应用程序中使用。我以前从未这样做过,任何关于这方面的指导都将不胜感激。我确实添加了存储过程并为其创建了函数,但不知道如何将其添加到控制器和视图中。对于下面提供的代码,我只想添加一张卡

存储过程:

CREATE PROCEDURE  [dbo].[CreateLoyaltyCards]
    @NumberOfCards AS integer, 
    @CustomerID  AS integer 
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @NumberOfRows as integer = 0;
    DECLARE @LoopNumber as integer = 0

    WHILE @LoopNumber < @NumberOfCards
    BEGIN
        INSERT INTO Cards (CustomerID, CardDate)
        VALUES (@CustomerID, GetDate())

        SET @LoopNumber = @LoopNumber + 1
    END

    SELECT        
        Customers.CustomerCompanyName, Cards.CardNumber
    FROM            
        Customers 
    INNER JOIN
        Cards ON Customers.CustomerID = Cards.CustomerID
    WHERE 
        Customers.CustomerID = @CustomerID
    ORDER BY 
       CardID ASC
       OFFSET @NumberOfRows ROWS
       FETCH NEXT @NumberOfCards ROWS ONLY
END
这是上下文类中的存储过程

public virtual ObjectResult<Card> CreateCards(Nullable<int> numberOfCards, Nullable<int> customerID)
{
    var numberOfCardsParameter = numberOfCards.HasValue ?
            new ObjectParameter("NumberOfCards", numberOfCards) :
            new ObjectParameter("NumberOfCards", typeof(int));

    var customerIDParameter = customerID.HasValue ?
            new ObjectParameter("CustomerID", customerID) :
            new ObjectParameter("CustomerID", typeof(int));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Card>("CreateCards", numberOfCardsParameter, customerIDParameter);
}
公共虚拟对象结果CreateCards(可空numberOfCards,可空customerID)
{
var numberOfCardsParameter=numberOfCards.HasValue?
新对象参数(“NumberOfCards”,NumberOfCards):
新的ObjectParameter(“NumberOfCards”,typeof(int));
var customerIDParameter=customerID.HasValue?
新的ObjectParameter(“CustomerID”,CustomerID):
新的ObjectParameter(“CustomerID”,typeof(int));
返回((IObjectContextAdapter)this.ObjectContext.ExecuteFunction(“CreateCards”,numberOfCardsParameter,customerIDParameter);
}

您只需创建EF类的对象并直接调用函数(从SP创建)

e、 g.假设上下文是您的对象

    context.CreateCards(numberOfCards, customerID);

可能的重复不能使用db调用存储过程方法?它使用db调用存储过程,但参数中有什么?该方法有参数。您只需要使用参数值调用该方法。krillgar共享的链接没有帮助?
    context.CreateCards(numberOfCards, customerID);