我只是想创建一个可以使用两个模型的控制器。 评论模型:
free
发布模型:
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; }
}
现在我想创建一个可以同时使用这两种模型的单一控制器。 我读到这样做的方法是使用ViewModel Pattern,所以我创建了另一个名为“ BlogViewModel.cs ”的模型类,其代码如下:
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; }
}
但是从这里我不明白是做什么的。我正在尝试使用Entity框架创建一个新的Controller,但我不知道在“数据上下文类”中选择什么。谁能解释我如何在两个模型和控制器之间建立连接?谢谢!
答案 0 :(得分:1)
您只需要一个控制器:发布。
由于评论与Post相关,您可以创建关系并使用EF进行映射。因此,您的帖子将包含评论列表,可以根据您的选择热切或懒惰地检索。所以谷歌的EF一对多关系,在你的帖子中创建一个IEnumerable的虚拟属性,并从任何模型返回。
除非我在这里遗漏了什么,否则你不需要ViewModel ......至少不能解决这个问题。在涉及组织时,ViewModel非常有用。
答案 1 :(得分:1)
请在您的存储库类中尝试以下操作 -
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;
}
}
请按照link查看从模型到视图模型的转换方式,反之亦然
答案 2 :(得分:0)
你可以这样做
@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我建议您使用一个上下文,因为多个上下文可能会导致混淆