Includere diversi riferimenti al secondo livello

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

Domanda

Supponiamo di avere questo modello:

public class Tiers
{
    public List<Contact> Contacts { get; set; }
}

e

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; }
}

Con EF7 vorrei recuperare tutti i dati dalla tabella Tiers, con i dati dalla tabella Contact, dalla tabella Titre, dalla tabella TypeContact e così via ... con una singola istruzione. Con l'API Include / ThenInclude posso scrivere qualcosa del genere:

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

Ma dopo la proprietà Titre, non posso includere altri riferimenti come TypeContact, Langue, Fonction ... Il metodo Include suggerisce un oggetto Tiers e ThenInclude suggerisce un oggetto Titre, ma non un oggetto Contatto. Come posso includere tutti i riferimenti dal mio elenco di contatti? Possiamo raggiungere questo obiettivo con un'unica istruzione?

Risposta accettata

.ThenInclude() esegue la concatenazione dell'ultimo .ThenInclude() o dell'ultimo .Include() (a seconda di quale è più recente) per .Include() più livelli. Per includere più fratelli allo stesso livello, usa semplicemente un'altra catena .Include() . La formattazione corretta del codice può migliorare drasticamente la leggibilità.

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché