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.netmvcを使用しています。テーブルとリレーションは問題ありませんが、詳細ビューの投稿コントローラーでは次のようになります。

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

このように、投稿がデータベースからすぐにロードされない場合、リストはNothingになりません。メンバーを取得するときに、次のように投稿を取得することもできます。

Post.Include(x => x.Posts)

現在ac#プロジェクトではなく、構文が欠落している場合は修正してください;)

于 2013-02-28T12:42:10.980 に答える