Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net使用一个控制器创建两个模型_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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;
    }
}