Precaricare le navigation property in Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

Sin dalla prima versione, entity Framework ha offerto la possibilità di utilizzare una sola query per recuperare i dati collegati a una entity. Ad esempio, se avessimo voluto recuperare un ordine, i suoi dettagli e il cliente che lo ha piazzato, avremmo potuto farlo sin da Entity Framework 1.0. Questa funzionalità però ha sempre sofferto di alcuni limiti sintattici quindi in Entity Framework Core è stata rivisitata per offrire delle API più semplici.
Il metodo principale per precaricare i dadti di una entity collegata è Include e funziona esattamente come in passato come si evince dal seguente codice.

var orders = context.Orders.Include(o => o.Details);

Quello che cambia in Entity Framework Core rispetto al passto è che se vogliamo recuperare anche il prodotto relativo a ogni dettaglio dell'ordine dobbiamo utilizzare il nuovo metodo ThenInclude.

var orders = context.Orders
  .Include(o => o.Details)
    .ThenInclude(d => d.Product);

Se oltre ai dettagli dell'ordine volessimo recuperare anche il cliente e i suoi indirizzi, potremmo utilizzare più volte i metodi appena visti.

var orders = context.Orders
  .Include(o => o.Details)
    .ThenInclude(d => d.Product)
  .Include(o => o.Customer)
    .ThenInclude(c => c.Addresses);

Con l'introduzione del metodo ThenInclude si è fatta pulizia rispetto alle versioni precedenti di Entity Framework dove il codice cambiava a seconda che la proprietà collegata fosse una lista o un oggetto singolo.

Il fatto che Entity Framework permetta di scrivere tutto in una unica query non garantisce che poi fisicamente i dati vengano recuperati dal database in una sola query. Entity Framework dopo aver valutato la query potrebbe suddividerla in più query per ottimizzare la quantità di dati che viaggia in rete.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi