0

EFモデルを使用するASP.NET MVCアプリケーションがあります(データベースファーストアプローチ)。アプリケーションで使用する必要があるSQL Serverで定義されたプロシージャを格納しています。私はこれまでこれをやったことがない、これに関するガイダンスは高く評価されるだろう。ストアドプロシージャを追加して関数を作成しましたが、コントローラとビューにそれを追加する方法はわかりません。下記のコードでは、単にカードを追加したいと思っています。C#とASP.NET MVCでストアドプロシージャを使用

ストアドプロシージャ:

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); 
} 
+2

可能性のある重複した[EntityFrameworkでストアドプロシージャを呼び出す方法?](https://stackoverflow.com/questions/14264750/how-to-call-stored-procedures-with-entityframework)

context.CreateCards(numberOfCards, customerID); 
krillgar

+0

あなたがすることはできませんdbを使用してストアドプロシージャメソッドを呼び出しますか? –

+0

dbを使用してストアドプロシージャを呼び出しますが、パラメータには何が入りますか? –

答えて

0

あなたです単にEFクラスのオブジェクトを作成し、(SPから作成された)関数を直接呼び出す必要があります。

文脈があなたのオブジェクトだとします。

関連する問題