2016-09-12 13 views
1

エンティティPostは、Commentと1対多の関係にあります。値がnullにすることはできません。しかし、このコードは関連オブジェクトのサブセットを含むプロパティ

例外ArgumentNullExceptionをスロー

public class Post 
{ 

    public virtual ICollection<Comment> Comments { get; set; } 
    public virtual ICollection<Comment> TopLevelComments 
    { 
     get 
     { 
      return Comments.Where(c => c.ParentID == null).ToList(); 
     } 
    } 
} 

:私はそれらの特定のサブセットを返すプロパティを持っているしたいと思います。パラメータ名:ソース

This answerが、それはまだnullですが、私はCommentsをフィルタリングするため、それはだことを示唆しているようです。しかし、この方法を使用してアクションで、私は熱心にそれをロードします:

var post = await _context.Post.Include(m => m.Author).Include(m => m.Comments).ThenInclude(m => m.Author).SingleOrDefaultAsync(m => m.PostID == id); 

どのように私はこれが仕事を得ることができますか?これは正しいアプローチですか?あなたは空のエンティティのコンストラクタであなたのコレクションのプロパティを初期化する必要がある例外のこの種のを避けるために

答えて

1

まず最初に、:

public Post() 
{ 
    Comment=new List<Comment>(); 
} 

2つ目はThenIncludeの使用であるあなたがEFコアを使用している私を示唆しています。その場合、このバージョンのEFは遅延読み込みをサポートしていないため、熱心な読み込みを使用する必要があります。

そして3つ目は、TopLevelCommentsプロパティは、あなたのモデルの一部としてマッピングされていないする必要があります:

modelBuilder.Entity<Post>() 
       .Ignore(b => b.TopLevelComments); 
関連する問題