Используйте хранимую процедуру в 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);
Другие вопросы по тегам