Inclure plusieurs références au deuxième niveau

asp.net-core-mvc entity-framework-core

Question

Supposons que nous avons 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, j'aimerais 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 telles que 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? Peut-on y parvenir avec une seule instruction?

Réponse acceptée

.ThenInclude() enchaînera à partir du dernier .ThenInclude() ou du dernier .Include() (selon le plus récent) pour extraire plusieurs niveaux. Pour inclure plusieurs frères et soeurs au même niveau, utilisez simplement une autre chaîne .Include() . Un formatage correct du code peut considérablement améliorer la lisibilité.

_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.


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow