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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Cambiare la chiave di partizionamento di Azure Cosmos DB
Anonimizzare i dati sensibili nei log di Azure Front Door
Implementare l'infinite scroll con QuickGrid in Blazor Server
Generare un hash con SHA-3 in .NET
Miglioramenti agli screen reader e al contrasto in Angular
Eliminare una project wiki di Azure DevOps
Generare la software bill of material (SBOM) in GitHub
Ordine e importanza per @layer in CSS
Generare una User Delegation SAS in .NET per Azure Blob Storage
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Usare il colore CSS per migliorare lo stile della pagina
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API