2014-09-12 148 views
0

人我今天有一段时间试图让这个工作。我认为我错过了导航属性。实体框架:导航属性 - 代码优先

我的控制器。当我把一个断点在富= 5,我期待在当地的观察窗口,“listOfComments”有,即使我的数据库中有列出的信息(见下文)

public ActionResult CommentsList() 
    { 
     var post = _db.GetPost(5); 
     List<Comment> listOfComments = post.Comments.ToList(); 
     var foo = 5; 
     return View(post); 
    } 

的getPost方法零个元素

public Post GetPost(int? postId) 
    { 
     var context = DataContext; 

     var post = context.Posts.FirstOrDefault(x => x.Id == postId); 
     if (post == null) 
     { 
      return new Post(); 
     } 
     return post; 


    } 

评论类

public class Comment 
{ 
    public int Id { get; set; } 
    [Required] 
    public DateTime Date { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public string Body { get; set; } 

    //Navigational 
    public Post Post { get; set; } 

} 

Post类

public class Post 
{ 
    public Post() 
    { 
     Comments = new HashSet<Comment>(); 
     Tags = new HashSet<Tag>(); 
    } 

    public int Id { get; set; } 

    [Required] 
    public string Title { get; set; } 
    [Required] 
    public DateTime Date { get; set; } 
    [Required] 
    public string Body { get; set; } 

    //Navigational 

    public ICollection<Comment> Comments { get; set; } 
    public ICollection<Tag> Tags { get; set; } 

} 

我的DbContext类

public class HundredBlog: DbContext 
{ 
    public HundredBlog() : base("HundredBlog") { } 

    public DbSet<Post> Posts { get; set; } 
    public DbSet<Comment> Comments { get; set; } 
    public DbSet<Administrator> Administrators { get; set; } 
    public DbSet<Tag> Tags { get; set; } 


} 

数据库表, “意见” 有以下栏目:

-Id 
-Date 
-Name 
-Email 
-Body 
-Post_Id 

数据库表, “帖子” 有以下栏目:

-Id 
-Title 
-Date 
-Body 

就像一个例子,我的数据库填充了评论列就好了,它添加了正确的Post_Id引用主键和所有。我有同样的问题与标签表,但即使是有它自己的参考表:

数据库表,“TagPosts”有以下栏目:

-TagId 
-PostId 

迷路了,请帮忙!

+1

我没有看到GetPost – Stilgar 2014-09-12 18:56:12

+0

的代码刚刚更新以反映GetPost,我不认为这是一个问题,但应该有所帮助。 – Spets 2014-09-12 19:19:55

回答

2

如果您希望启用延迟加载,则Post类中的Comments集合应该是虚拟的,或者您应该使用Include(p => p.Comments)来加载具有原始查询的数据。一般来说,第二种方法更好。

+0

这对我有用。我无法让延迟加载工作,因为它是虚拟的(它因为新的HashSet而不断抛出异常)。我没有绕过它,所以在LINQ查询中我只包含了Include(x => x.Comments)的注释.Include(y => y.Tags)...等 它工作。感谢Stilgar! – Spets 2014-09-12 19:46:56