Используйте хранимую процедуру в C# и ASP.NET MVC
У меня есть приложение ASP.NET MVC, которое использует модель 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
CardsController // это где мне нужно использовать хранимую процедуру
public ActionResult Create()
{
ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CustomerCompanyName");
return View();
}
// POST: Cards/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "CardID,CardNumber,CustomerID,StoreCustomerID,CardDate,CardStatus,CardNumber2,DiscountLevelID,LoyaltyLevelID,GiftCardEnabled,LoyaltyEnabled")] Card card)
{
if (ModelState.IsValid)
{
db.Cards.Add(card);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CustomerCompanyName", card.CustomerID);
return View(card);
}
Это хранимая процедура в классе контекста
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);
}
1 ответ
Вам просто нужно создать объект класса EF и напрямую вызвать функцию (созданную из SP).
Например, предположим, что контекст является вашим объектом.
context.CreateCards(numberOfCards, customerID);