C# Net使用一个控制器创建两个模型
我只是想创建一个控制器,它可以与两个模型一起工作评论模式:C# Net使用一个控制器创建两个模型,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我只是想创建一个控制器,它可以与两个模型一起工作评论模式: 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; } pub
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; }
}
但是从这里我不知道我该做什么。我试图使用Entity framework创建一个新的控制器,但我不知道在的“数据上下文类”中选择什么。有人能告诉我如何在两个模型和控制器之间建立连接吗?谢谢 您只需要一个控制器:Post 由于评论与帖子相关,所以您可以创建一个关系,并使用EF将其映射。所以你的帖子会有一个评论列表,可以根据你的选择急切地或懒散地检索。因此,google for EF一对多关系,在您的帖子中创建一个IEnumerable虚拟财产,并从任何模型返回它
除非我在这里遗漏了什么,否则您不需要ViewModel。。。至少不能解决这个问题。当涉及到组织时,ViewModel非常有用。您同样可以这样做
@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我建议您使用一个上下文,因为多个上下文可能会导致混淆在这种情况下,您不需要在视图中传递两个模型。您只需传递
注释
模型即可。但是,您可以使用Tuple在视图中传递多个模型。请在您的存储库类中尝试以下操作-
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;
}
}
请按照查看如何从模型转换到viewmodel,以及如何从viewmodel转换到viewmodel您走的是正确的道路。使用控制器中的MotorkeeviewModel。您只需通过VS模板生成具有此类型的CRUD控制器,并查看它是如何使用的。拆分DbContext有什么原因吗?如果帖子
和评论
都是同一DbContext的一部分,则无需选择。如果我有一大组实体,我可能会决定拆分,但您需要小心地将相关实体分组在一起,以免遇到此问题。我必须将其拆分为2个数据库。。Kanchirk,我不知道哪种类型将是控制器,因为当我创建它时,我需要选择“日期上下文类”,我有两个-在两个模型中。。不是实体,也不是DbContext
@TomerAro的成员要在视图中显示什么,视图模型将取决于视图要求。
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;
}
}