Включить несколько ссылок на второй уровень
Предположим, у нас есть эта модель:
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 и т.д.... с помощью одной инструкции. С помощью API Include/ThenInclude я могу написать что-то вроде этого:
_dbSet
.Include(tiers => tiers.Contacts)
.ThenInclude(contact => contact.Titre)
.ToList();
Но после свойства Titre я не могу включить другие ссылки, такие как TypeContact, Langue, Fonction... Метод Include предлагает объекты Tiers, а ThenInclude предлагает объект Titre, но не объект Contact. Как я могу включить все ссылки из моего списка контактов? Можем ли мы достичь этого с помощью одной инструкции?
Ответы
Ответ 1
.ThenInclude()
будет .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.
Ответ 2
Для полноты картины:
Также можно включать вложенные свойства напрямую через " Include
если они не являются свойствами коллекции, например:
_dbSet
.Include(tier => tier.Contact.Titre)
.Include(tier => tier.Contact.TypeContact)
.Include(tier => tier.Contact.Langue);