[asp.net-core-mvc] 두 번째 수준에 대한 여러 참조 포함

이 모델이 있다고 가정합니다.

public class Tiers
{
    public List<Contact> Contacts { get; set; }
}

public class Contact
{
    public int Id { get; set; }
    public Tiers Tiers { get; set; }
    public Titre Titre { get; set; }
    public TypeContact TypeContact { get; set; }
    public Langue Langue { get; set; }
    public Fonction Fonction { get; set; }
    public Service Service { get; set; }
    public StatutMail StatutMail { get; set; }
}

EF7을 사용하면 Tiers 테이블의 모든 데이터, Contact 테이블, Titre 테이블, TypeContact 테이블 등의 데이터를 단일 명령으로 검색하고 싶습니다. Include / ThenInclude API를 사용하면 다음과 같이 작성할 수 있습니다.

_dbSet
     .Include(tiers => tiers.Contacts)
          .ThenInclude(contact => contact.Titre)
     .ToList();

그러나 Titre 속성 이후에는 TypeContact, Langue, Fonction과 같은 다른 참조를 포함 할 수 없습니다. Include 메서드는 Tiers 개체를 제안하고 ThenInclude는 Titre 개체를 제안하지만 Contact 개체는 제안하지 않습니다. 내 연락처 목록에있는 모든 참조를 포함하려면 어떻게해야합니까? 하나의 명령으로 이것을 달성 할 수 있습니까?



답변

.ThenInclude()마지막 .ThenInclude()또는 마지막 .Include()(둘 중 더 최근)을 연결하여 여러 수준을 가져옵니다. 같은 수준에 여러 형제를 포함하려면 다른 .Include()체인을 사용하십시오 . 코드의 형식을 올바르게 지정하면 가독성이 크게 향상 될 수 있습니다.

_dbSet
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.Titre)
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.TypeContact)
    .Include(tiers => tiers.Contacts).ThenInclude(contact => contact.Langue);
    // etc.


답변

완전성을 위해 :

다음 과 같이 Include 컬렉션 속성이 아닌 경우 중첩 속성을 직접 포함 할 수도 있습니다 .

_dbSet
    .Include(tier => tier.Contact.Titre)
    .Include(tier => tier.Contact.TypeContact)
    .Include(tier => tier.Contact.Langue);


답변