2016-07-26 4 views
1

엔터티 프레임 워크 코어을 저장소 패턴과 함께 사용하고 있는데 한 가지 문제가 있습니다.EF 코어에서`ThenInclude '를 사용하려고 할 때 예외가 발생했습니다

나는 모습, 여기에 관련이없는 일을 숨기는 클래스 Customer, CompanyEmail,이 다음 Customer 사이의 one-to-one 연관이되도록

public class Email 
{ 
    public int EmailId { get; protected set; } 

    public string Address { get; protected set; } 

    public string Description { get; protected set; } 

    public Email(string address, string description) 
    { 
     if (string.isNullOrEmpty(address)) 
      throw new ArgumentException(nameof(address)); 

     if (string.isNullOrEmpty(description)) 
      throw new ArgumentException(nameof(description)); 

     this.Address = address; 
     this.Description = description; 
    } 

    protected Email() { } 
} 

public class Company 
{ 
    public int CompanyId { get; protected set; } 

    public IList<Email> Emails { get; set; } 
} 

public class Customer 
{ 
    public int CustomerId { get; protected set; } 

    public Company Company { get; set; } 
} 

매핑이 설정되어 Company이고, CompanyEmail 사이에는 일대 다 관계가 있습니다.

public IEnumerable<Customer> GetAll() 
{ 
    return _context.Set<Customer>() 
        .Include(x => x.Company) 
         .ThenInclude(x => x.Emails) 
        as IEnumerable<Customer>; 
} 

지금 다음 ThenInclude 조각 문제를주고 다음 CustomersRepository

나는 다음 방법을 만들었습니다. 이 메서드를 사용하려고하면 source이 null이라는 하나의 실행 결과가 발생합니다.

나는 모든 것을 검토했지만 잘못된 것은 발견하지 못했습니다. 모든 것이 올바르게 쓰여진 것 같습니다.

요점은 다음과 같습니다 나는 C의 많은있다 CAB 중 하나를 가질 수 있도록하고, B 기관 A, B을 가지고, 내가 A를 검색 할 때 나는 관련된 모든 것을 얻을 필요가있다.

내가 뭘 잘못하고 있니? 왜 내가이 예외를 얻고 있습니까?

+1

'포함 할 수 없습니까?' – Will

+0

감사합니다. @Will,이 솔루션을 사용하여 작동합니다! 그건 그렇고 왜'ThenInclude'가 작동하지 않는지 아십니까? 내가 권장하는 방법이지만,이 경우 단순히 작동하지 않는 워드 프로세서를 이해한다면. – user1620696

+0

죄송합니다, 알 수 없습니다. ThenInclue를 사용하지 마십시오. 구현 방법을 모르십시오. Lemme에서 잠깐 살펴보고 대답을 추가하십시오. – Will

답변

3

이 고정보고 한 후, Github에서 https://github.com/aspnet/EntityFramework/issues/2274

이가 IOE로보고에서이 버그 리포트에 관련된 것 같다, 다음은 예외처럼, 다시 NRE로했다. 문제가 다시 수정되었지만 어떤 버전인지 확신 할 수 없으며 현재 사용중인 버전을 알지 못합니다.

합니다 (github에의 생식에 ThenInclude 문제에 대한 검색 - 토니가있다.)

이 불안정 소리. 그것에서 멀리 체재하십시오. 포함의 전체 경로를 직접 지정하여 문제를 완전히 회피 할 수 있습니다.

muhCompaniesOrWhatevs.Include(x => x.Company.Emails);