[英]C# (MVC3) Stored Procedure LINQ SQL
我有一個問題,其中包括通過存儲過程顯示表中的所有數據。 我正在使用LINQ訪問我的存儲過程,但事實是,我的結果(顯示的數據)只是表中的最后一行。 我無法正常工作...如果有人可以幫助我/解釋我做錯了什么,我將深表感謝。
型號: RecipeModel
模型
public class RecipeModel
{
.....
public void GetAllRecipes()
{
DataClassesDataContext db = new DataClassesDataContext();
var result = db.p_get_all_recipes();
foreach (var r in result)
{
this.recipeName = r.name;
this.recipeDescription = r.description;
this.recipeSteps = r.steps;
this.createdAt = r.createdAt;
this.updatedAt = r.updatedAt;
this.ownerID = r.owner_id;
}
}
控制器 : RecipeController
public class RecipeController : Controller
{
[HttpGet]
public ActionResult Index()
{
RecipeModel rec = new RecipeModel();
rec.GetAllRecipes();
return View(rec);
}
視圖(剃刀) : Index
@model MVC3_LINQ_SP.Models.RecipeModel
@{
ViewBag.Title = "Index";
}
<legend>Recipe </legend>
<p>@Html.DisplayFor(model => model.rName)</p>
您實際上並沒有返回存儲過程的值,而是覆蓋了RecipeModel
的屬性。
您應該創建一個Recipe類來保存存儲過程的返回值:
public class Recipe
{
public string recipeName { get; set; }
public string recipeDescription { get; set; }
public string recipeSteps { get; set; }
public DateTime createdAt { get; set; }
public DateTime updatedAt { get; set; }
public DateTime ownerID { get; set; }
}
然后更改您的過程以完成此操作-我假設db.p_get_all_recipes()返回的是可查詢的列表:
public IQueryable<Recipe> GetAllRecipes()
{
DataClassesDataContext db = new DataClassesDataContext();
return db.p_get_all_recipes().Select(r => new Recipe()
{
recipeName = r.name;
recipeDescription = r.description;
recipeSteps = r.steps;
createdAt = r.createdAt;
updatedAt = r.updatedAt;
ownerID = r.owner_id;
});
}
然后,您需要更改視圖:
@model IQueryable<Recipe>
和您的控制器動作:
[HttpGet]
public ActionResult Index()
{
RecipeModel rec = new RecipeModel();
return View( rec.GetAllRecipes(););
}
您的模型有問題。 您可以從SP加載所有配方,然后在周期中嘗試將結果中的值設置為RecipeModel字段。 但是在您的周期中,如果您有多個配方,則接下來要執行的操作:在迭代1中,您從配方1中獲取值並將其設置為RecipeModel,然后轉到迭代2中,並再次將配方2中的所有值都設置為相同對象RecipeModel已經具有配方1中的值,因此您只需覆蓋這些值。
因此,您需要為每個配方數據庫創建一個單獨的RecipeModel。 您要傳遞給視圖的模型應該是RecipeModels的列表,並且在View中應該有foreach周期,該周期將配方寫入html。
您在以下for循環中覆蓋了局部變量:
foreach (var r in result)
{
this.recipeName = r.name;
this.recipeDescription = r.description;
this.recipeSteps = r.steps;
this.createdAt = r.createdAt;
this.updatedAt = r.updatedAt;
this.ownerID = r.owner_id;
}
您需要將每個迭代添加到Model的新實例中,並返回List
或其他集合類型。
您有一個RecipeModel
類,在其中有一個獲取所有項目的方法(RecipeModel的集合)。 仔細查看您的方法。 您正在遍歷集合並一次又一次地設置Class(屬性的對象)的屬性(覆蓋同一實例)
理想情況下,在循環中,您需要創建RecipeModel的實例並設置值並將其添加到RecipeModel的集合中。
我不會在您的Model類中混合使用此方法。 我將其移至一個單獨的類,在該類中將有一種方法可以返回RecipeModel
類的列表。 存儲庫方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.