Supposons que nous ayons ce modèle:
public class Tiers
{
public List<Contact> Contacts { get; set; }
}
et
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; }
}
Avec EF7, je voudrais récupérer toutes les données de la table Tiers, avec les données de la table Contact, de la table Titre, de la table TypeContact et ainsi de suite ... avec une seule instruction. Avec l'API Include / ThenInclude, je peux écrire quelque chose comme ceci:
_dbSet
.Include(tiers => tiers.Contacts)
.ThenInclude(contact => contact.Titre)
.ToList();
Mais après la propriété Titre, je ne peux pas inclure d'autres références comme TypeContact, Langue, Fonction ... La méthode Include suggère un objet Tiers, et ThenInclude suggère un objet Titre, mais pas un objet Contact. Comment puis-je inclure toutes les références de ma liste de contacts? Pouvons-nous y parvenir avec une seule instruction?
la source
var contacts = _dbSet.Include(tiers => tiers.Contacts);
contacts.ThenInclude(contact => contact.Titre);
contacts.ThenInclude(contact => contact.TypeContact);
contacts.ThenInclude(contact => contact.Langue);
ça ne marcherait pas?Queryable
objets à chaque fois et ne les évalueriez jamais.contacts
n'aura jamais que la valeur d'origine que vous lui avez attribuée.tiers.Contacts
c'est unList<T>
? comment spécifieriez-vous l'élément alors?Par souci d'exhaustivité:
Il est également possible d'inclure des propriétés imbriquées directement via
Include
au cas où elles ne seraient pas des propriétés de collection comme ceci:la source