2015-05-06 3 views
44

Предположим, что мы имеем эту модель:Включите несколько ссылок на втором уровне

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 с DATAS из Контакта таблицы, таблицы Titre, из таблицы TypeContact и т. д. с одной единственной инструкцией. С Включить/ThenInclude API я могу написать что-то вроде этого:

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

Но после того, как Titre собственности, не может включать в себя другие ссылки, как TypeContact, Langue, Fonction ... Включать метод наводит на мысль о объекты ярусах, и ThenInclude предполагает объект Titre, но не объект Contact. Как включить все ссылки из моего списка контактов? Можем ли мы достичь этого с помощью одной инструкции?

ответ

64

.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

OK спасибо! Я думал, что будет лучшее решение;) –

+1

Кстати, этот вопрос вдохновил меня на создание проблемы [# 2124] (https://github.com/aspnet/EntityFramework/issues/2124) – bricelam

+0

Почему бы и нет :) это может быть Хорошая функция –

Смежные вопросы