簡體   English   中英

ASP.Net使用一個控制器創建兩個模型

[英]ASP.Net Create Two Models With One Controller

我只是想創建一個可以使用兩個模型的控制器。 評論模型:

 public class Comment
 {
    public int ID { get; set; } // property
    public int PostID { get; set; }
    public String Title { get; set; }
    public String Name { get; set; }
    public Uri Url { get; set; }
    public String Text { get; set; }
    public Post Post { get; set; }
}

public class CommentDBContext : DbContext 
{
    public DbSet<Comment> Comments { get; set; }

    public System.Data.Entity.DbSet<BlogShauli.Models.Post> Posts { get; set; }

}

郵政模式:

  public class Post
  {
    public int ID { get; set; } // property
    public String Title { get; set; }
    public String Author { get; set; }
    public String AuthorSite { get; set; }
    public DateTime ReleaseDate { get; set; }
    public String Text { get; set; }
 }

public class PostDBContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
}

現在我想創建一個可以同時使用這兩種模型的單一控制器。 我讀到這樣做的方法是使用ViewModel Pattern,所以我創建了另一個名為“ BlogViewModel.cs ”的模型類,其代碼如下:

public class MotorcycleViewModel
 {
     public Comment CommentPointer { get; set; }
     public Post PostPointer { get; set; }
 }

但從這里我不明白做什么。 我正在嘗試使用Entity框架創建一個新的Controller,但我不知道在“數據上下文類”中要選擇什么。 誰能解釋我如何在兩個模型和控制器之間建立連接? 謝謝!

你只需要一個控制器:發布。

由於評論與Post相關,您可以創建關系並使用EF對其進行映射。 因此,您的帖子將包含評論列表,可以根據您的選擇熱切或懶惰地檢索。 所以谷歌的EF一對多關系,在你的帖子中創建一個IEnumerable的虛擬屬性,並從任何模型返回它。

除非我在這里遺漏了一些東西,否則你不需要ViewModel ......至少不能解決這個問題。 在涉及組織時,ViewModel非常有用。

請在您的存儲庫類中嘗試以下操作 -

public MotorcycleViewModel GetModelData(int commentId, int postId)
{
    MotorcycleViewModel result =new MotorcycleViewModel();
    using (var context = new CommentDBContext())
    {
       var post = (from pst in context.Post where pst.ID == postId  select pst).FirstOrDefault();
       var comment = (from cmt in context.Comment where cmt.ID == commentId select cmt).FirstOrDefault();
       result.CommentPointer = comment;
       result.PostPointer = post;
       return result;
    }
}

請點擊鏈接查看從模型到視圖模型的轉換方式,反之亦然

你也可以這樣做

@model MotorcycleViewModel

@Html.DisplayNameFor(x=>x.CommentPointer.Title) @Html.DisplayFor(x=>x.CommentPointer.Title)

@Html.DisplayNameFor(x=>x.PostPointer.Title) @Html.DisplayFor(x=>x.PostPointer.Title)

但是這段代碼可以幫助你顯示來自兩個表的數據..而且@TomerAro我建議你使用一個上下文,因為多個上下文可能會引起混淆

在這種情況下,您不需要在視圖中傳遞兩個模型。 您只需傳遞Comment模型即可。 但是,您可以使用Tupleview傳遞多個模型。 這是使用Tuple進行CRUD操作的一個很好的例子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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