Il provider LINQ di Entity Framework Core non è ancora molto potente, ma migliora a ogni nuovo rilascio. Uno dei problemi più spinosi del provider è che in alcuni casi risolve le query utilizzando la tecnica 1+N che rischia di compromettere seriamente le performance della nostra applicazione e del database in generale. Prendiamo come esempio la seguente query.
var query = context.Orders.Select(
c => c.Details.Where(o => o.Amount > 50).Select(o => o.Amount));In questo caso, Entity Framework Core effettua una query per tirare fuori gli ordini che corrrispondono ai criteri di ricerca, e poi per ogni ordine, esegue una query per i dettagli. Questo significa che se la query estrae 20 ordini, effettua 21 query sul database. Per prevenire qusto problema, a partire da Entity Framework Core 2.1 possiamo ricorrere al metodo ToList nella subquery che specifica al provider che vogliamo caricare la subquery utilizzando n unico comando SQL.
var query = context.Orders.Select(
c => c.Details.Where(o => o.Amount > 50).Select(o => o.Amount).ToList());In questo modo, Entity Framework Core effettua una query per gli ordini e una per tutti i dettagli riducendo così il numero di query da 21 a 2.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Interagire con Azure DevOps tramite MCP Server
Controllare la telemetria con .NET Aspire
Creare una libreria CSS universale - Rotazione degli elementi
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Utilizzare Hybrid Cache in .NET 9
Ridurre il reflow ottimizzando il CSS
Path addizionali per gli asset in ASP.NET Core MVC
Arricchire l'interfaccia di .NET Aspire
Potenziare la ricerca su Cosmos DB con Full Text Search
Analizzare il contenuto di una issue con GitHub Models e AI
Proteggere l'endpoint dell'agente A2A delle Logic App
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Sfruttare una CDN con i bundle di ASP.NET
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform


