Fino alla versione 2.2, Entity Framework risolve le query con Include verso una collection navigation property utilizzando un query per ogni proprietà e non creando un unico comando SQL. Questo comportamento ha il vantaggio di diminuire sensibilmente la quantità di viaggi che navigano tra l'applicazione e il database, ma al tempo stesso apre la possibilità al recupero di dati incongruenti in quanto tra una query e l'altra i dati possono essere modificati.
Per ovviare a questo problema, con Entity Framework 3 il comportamento è stato modificato per eseguire tutte le query con un solo comando SQL. Questo cambio ha però introdotto un problema in quanto le query con molte Include hanno subito un notevole rallentamento dovuto all'enorme quantità di dati ritrovati.
Entity Framework 5 introduce una nuova funzionalità che permette all'utente di decidere, a livello di query, quale tecnica utilizzare per risolvere le Include. Per default, viene utilizzata una unica query come in Entity Framework 3, ma tramite il metodo AsSplitQuery possiamo decidere unvece di usare query separate.
using (var context = new MyContext()) { var people = context.People .Include(p => p.Addresses) .AsSplitQuery() .ToList(); }
In questo esempio, viene eseguita una query per recuperare le persone e un'altra per gli indirizzi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Generare token per autenicarsi sulle API di GitHub
Eseguire una query su SQL Azure tramite un workflow di GitHub
Generare file per il download da Blazor WebAssembly
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Reactive form tipizzati con modellazione del FormBuilder in Angular
Usare le collection expression per inizializzare una lista di oggetti in C#
Utilizzare politiche di resiliency con Azure Container App
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Specificare il versioning nel path degli URL in ASP.NET Web API
Short-circuiting della Pipeline in ASP.NET Core
Come migrare da una form non tipizzata a una form tipizzata in Angular
Limitare le richieste lato server con l'interactive routing di Blazor 8
I più letti di oggi
- Miglioramenti nelle performance di Angular 16
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- HTML5 con CSS e JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)