簡體   English   中英

C#(MVC3)存儲過程LINQ SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM