In Entity Framework Core è stato introdotto il concetto di ClientEvaluation. Questa funzionalità rende possibile eseguire query che non possono essere tradotte interamente in SQL. Prendiamo il seguente esempio:
var people = context.People .Select(p => new { p.Id, FullName = CreateFullName(p.FirstName, p.LastName) }) .ToList();
In questi casi, il provider LINQ di Entity Framework non può tradurre il metodo CreateFullName in SQL, quindi esegue il metodo Select in memoria. Questo comporta che l'intera Entity viene scaricata dal database anche se solo alcuni dati vengono utilizzati con ovvie conseguenze negative sull'utilizzo delle risorse.
Sebbene con il metodo Select il problema possa essere limitato, con il metodo Where il problema esplode:
var people = context.People .Where(p => CreateFullName(p.FirstName, p.LastName).Contains("mos")) .ToList();
In questo caso, Entity Framework scarica l'intera tabella in memoria e poi esegue la Where in locale. Questo ovviamente ha un impatto negativo in molti casi insostenibile per le performance.
Per ovviare a questi problemi, Entity Framework Core permette di disabilitare la ClientEvaluation in fase di configurazione.
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Introduzione alle Container Queries
Creare una custom property in GitHub
Utilizzare Azure Cosmos DB con i vettori
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Scrivere selettori CSS più semplici ed efficienti con :is()
Generare velocemente pagine CRUD in Blazor con QuickGrid
Utilizzare Locust con Azure Load Testing
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Recuperare l'ultima versione di una release di GitHub
Aggiornare a .NET 9 su Azure App Service
Testare l'invio dei messaggi con Event Hubs Data Explorer
Ottimizzare le performance usando Span<T> e il metodo Split
I più letti di oggi
- Arriva WinFX beta2, WinFS beta2 a metà giugno
- Microsoft cambia nome a WinFX: ritorna .NET Framework 3.0
- Anche il .NET Framework 3.0 è in RC1
- #IE10 disponibile al download da subito: http://aspitalia.com/vf http://aspitalia.com/mix-11 #mix11
- #ie10 supporta il multitouch anche in #Javascript. http://aspitalia.com/build-win8 #BldWin
- il team del #windows store spiega in dettaglio come aggiungere applicazioni desktop allo store di #win8 https://aspit.co/95
- non perdete a #aspilive @CristianCivera su sviluppare app cross platform con #vs2013 e #xamarin: https://aspit.co/VS14-live #ios #android
- rilasciato l'sdk per il #microsoftband. supporto per app su #wp81 e #android: https://aspit.co/a2m
- finiamo con @itsonlyGianca e #Windows10 iot core e #raspberrypi2 con #VS2015 su #aspilive: https://aspit.co/VS2015-live
- oggi dalle 17:30 c'è il lancio online di @VisualStudio 2015. seguitelo live qui: https://aspit.co/a51 #vs2015