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