Подтвердить что ты не робот

Включить несколько ссылок на второй уровень

Предположим, у нас есть эта модель:

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. Как я могу включить все ссылки из моего списка контактов? Можем ли мы достичь этого с помощью одной инструкции?

4b9b3361

Ответ 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);