이 모델이 있다고 가정합니다.
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);