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
Introduzione ai web component HTML
Utilizzare WhenEach per processare i risultati di una lista di task
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Il nuovo controllo Range di Blazor 9
Referenziare un @layer più alto in CSS
Effettuare il refresh dei dati di una QuickGrid di Blazor
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Creare un webhook in Azure DevOps
Gestione CSS in Blazor con .NET 9
Scrivere selettori CSS più semplici ed efficienti con :is()
Ordinare randomicamente una lista in C#
Change tracking e composition in Entity Framework
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!