1

我是初学者,我有 3 个实体:成员、帖子、评论。一个成员有很多帖子,一个帖子有很多评论。

   public class Member
   {
            [Key]
            public int Id{get;set;}    
            public string Name{get;set;}   
            public virtual ICollection<Post> Posts { get; set; }    
   }
   public class Post
   {            
       [Key]
       public int PostId{get;set;}        
       public string Subject{get;set;}        
       public int AccountId{get;set;}             
       public virtual Member member{get;set;}        
       public ICollection<Comment> Comments { get; set; }
   }

   public class Comment
   {
      [Key]
       public int CommentId{get;set;}    
       public string Body{get;set;}
       public int PostId { get; set; }
       public virtual Post post { get; set; }
   }

这是在我的上下文中定义的关系:

           modelBuilder.Entity<Post>()
                .HasRequired(c=>c.member)
                .WithMany(t=>t.Posts)
                .HasForeignKey(d=>d.AccountId);

           modelBuilder.Entity<Comment>()
               .HasRequired(c => c.post)
               .WithMany(t => t.Comments);
               .HasForeignKey(d=>d.AccountId);

我使用 asp.net mvc。表和关系都可以,但是在详细信息视图的 Post 控制器中:

 @model sishan.Models.Friend
  .
  .
  .  

 @foreach (var item in Model.Comments)
   {
      <p> @item.Body</p>
   }

我收到此错误:对象引用未设置为对象的实例。

我没有任何语法错误。

请帮我。对不起我的英语不好。

4

2 回答 2

4

您是否启用了延迟加载?如果没有,那么您应该手动包含导航属性:http: //msdn.microsoft.com/en-us/data/jj574232.aspx

于 2013-02-28T12:13:38.433 回答
0
public class Member
{

        Public Member(){
            Post = new new List<Post>();
        }

        [Key]
        public int Id{get;set;}    
        public string Name{get;set;}   
        public virtual ICollection<Post> Posts { get; set; }    
}

这样,如果您的 Post 没有立即从数据库中加载,则列表不会是 Nothing。获取您的会员时,您还可以获取包含以下内容的帖子:

Post.Include(x => x.Posts)

如果我缺少一些语法,请纠正我,而不是现在的 ac# 项目;)

于 2013-02-28T12:42:10.980 回答