2016-09-12 3 views
1

Comment과 일대 다 관계에있는 엔터티 Post이 있습니다.관련 개체의 하위 집합을 포함하는 속성

public class Post 
{ 

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

그러나,이 코드는

경우 ArgumentNullException을 던져 : 나는 단지 그들 중 특정 부분 집합을 반환하는 속성을 가지고 싶습니다 값은 null 일 수 없습니다. 매개 변수 이름 : 소스

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

어떻게 작동합니까? 이것이 올바른 접근법입니까? 당신이 EF 코어를 사용하는 날을 제안

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

두 번째 것은 ThenInclude의 사용은 다음과 같습니다

답변

1

우선, 당신은 빈 개체의 생성자에서 컬렉션 속성을 초기화 할 필요가 예외의이 종류를 방지 할 수 있습니다. 이 경우 EF가 지연로드를 지원하지 않으므로 열심히로드해야합니다.

modelBuilder.Entity<Post>() 
       .Ignore(b => b.TopLevelComments); 
:

그리고 세 번째 것은

TopLevelComments 속성이 모델의 한 부분으로 매핑되지해야한다입니다