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
Usare il versioning con i controller di ASP.NET Core Web API
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Gestire i null nelle reactive form tipizzate di Angular
Sostituire la GitHub Action di login su private registry
Creare gruppi di client per Event Grid MQTT
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Usare le collection expression per inizializzare una lista di oggetti in C#
Semplificare il deployment di siti statici con Azure Static Web App
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Utilizzare i primary constructor di C# per inizializzare le proprietà