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
Creazione di componenti personalizzati in React.js con Tailwind CSS
Usare il versioning con i controller di ASP.NET Core Web API
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Eseguire operazioni con timeout in React
Utilizzare un service principal per accedere a Azure Container Registry
Usare le variabili per personalizzare gli stili CSS
Specificare il versioning nel path degli URL in ASP.NET Web API
Copiare automaticamente le secret tra più repository di GitHub
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Come migrare da una form non tipizzata a una form tipizzata in Angular
Effettuare chiamate con versioning da Blazor ad ASP.NET Core