[英]Unable to call “select” stored procedure using EF6 code first from database
[英]Stored procedure in mvc using EF(Database first)
我有一個MVC應用程序,它需要調用數據庫中的存儲過程。 該功能基本上允許用戶選擇一個商店,並輸入他們想要為該商店生成的卡數。 我的代碼的工作方式是插入並生成這些卡,但始終因以下錯誤而中斷:“數據讀取器與指定的'GiftworxModel.Card'不兼容。類型為'CardID'的成員沒有對應的列在同名的數據讀取器中。” 創建卡后,控制器方法也不會重定向到索引。
上下文類:
public virtual ObjectResult<Card> CreateCards(Nullable<int> numberOfCards, Nullable<int> customerID, MergeOption mergeOption)
{
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", mergeOption, numberOfCardsParameter, customerIDParameter);//This is where the code breaks
}
控制器方式:
public ActionResult Create()
{
ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CustomerCompanyName");
return View();
}
// POST: Cards/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Card card, int? numberOfCards, int?customerId)
{
var cards = db.CreateCards(numberOfCards, customerId).ToList();
ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "CustomerCompanyName", card.CustomerID);
return RedirectToAction("Index", "Cards");
}
視圖:
@using (Html.BeginForm("Create", "Cards", FormMethod.Post)) { @Html.AntiForgeryToken() <div class="panel-body"> <div class="row"> <div class="col-lg-12"> <form role="form"> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.HiddenFor(model => model.CardID) <div class="form-group"> <label>Store</label> @Html.DropDownList("CustomerID", null, htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.CustomerID, "", new { @class = "text-danger" }) </div> <div class="form-group"> Number of Cards: <input type="text" name="numberOfCards"/> </div> <input type="submit" value="Create" class="btn btn-default" style="background-color: #0a9dbd; color: white;" /> }
存儲過程:
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
根據錯誤,您將得到:
數據讀取器與指定的GiftworxModel.Card不兼容。 類型為CardID的成員在數據讀取器中沒有具有相同名稱的對應列
你已經CardID
物業GiftworxModel.Card
類,但你不必返回CardID
從存儲過程。 只需嘗試從存儲過程傳遞CardID。 因此,基本上,您的存儲過程結果集應返回GiftworxModel.Card
類中存在的所有字段。
您試圖將存儲過程結果映射到“ Card”對象,但映射失敗。 我無法確定,因為我看不到存儲過程返回的選擇,但是您要么不返回“ Card”結果,要么不返回其所有屬性(例如:錯誤中的CardID) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.