Una delle caratteristiche delle prime versioni di Entity Framework Core era la capacità di capire che una query non poteva essere tradotta in sql e quindi scaricare i dati in locale per poi processarli in locale. Sebbene elegante, questa caratteristica presentava un possibile enorme problema di performance. Infatti senza rendersene conto, si potevano scaricare enormi quantità di dati dal database per poi sfruttarne solo una parte.
Con la versione 3 di Entity Framework Core, questa caratteristica è stata eliminata proprio per evitare problemi. Tuttavia, possiamo sempre ripristinarla semplicemente usando il metodo AsEnumerable. Quando usiamo questo metodo, tutto ciò che viene prima viene tradotto in Sql, tutto ciò che viene processato dopo viene invece processato lato client.
private bool LocalFilter(Person c) => c.Name.StartsWith("A");
var x1 = ctx.People
.Where(c => c.Id < 100)
.AsEnumerable()
.Where(LocalFilter)
.ToList();In questo snippet, EF esegue i seguenti passi: genera una query sql che recupera tutte le persone che hanno id minore di 100, scarica i dati in locale i dati e poi li processa passandoli alla funzione di filtro che ne esclude altri in base all'inizio del nome.
Questa tecnica è sicuramente elegante, ma bisogna essere consapevoli di quello che si fa altrimenti si rischiano enormi problemi di performance.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Integrare OpenAI tramite Aspire
Integrare email esterne con Azure Functions e Managed Connectors
Il nuovo persistent state in Blazor
Supporto semplificato per le left join in Entity Framework 10
Personalizzare le pagine di errore su Azure App Service
Usare la parola chiave field per semplificare la scrittura di proprietà in C#
Gestire il ciclo di vita di AbortController in Javascript
Running workloads and operations with Azure Kubernetes Service
Rendere affidabile lo scale out su Azure App Service
Utilizzare noopener e noreferrer nei link HTML
Gestire pubblicazione Kubernetes tramite .NET Aspire
Ridimensionamento automatico input tramite CSS


