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
Selettore CSS :has() e i suoi casi d'uso avanzati
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Integrare un servizio esterno con .NET Aspire
Utilizzare Intersect e Except per filtrare set di dati in TSql
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Creare agenti facilmente con Azure AI Agent Service
Anonimizzare i dati sensibili nei log di Azure Front Door
Combinare Container Queries e Media Queries
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
.NET Aspire per applicazioni distribuite
Creare una libreria CSS universale: Clip-path