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
Supportare la crittografia di ASP.NET Core con Azure Container App
Integrare SQL Server in un progetto .NET Aspire
Ciclo di vita risorse con .NET Aspire
Eseguire query in contemporanea con EF
Ottimizzare la content-visibility in CSS specificando lo spazio da occupato dall'area non renderizzata
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Filtrare i dati in ASP.NET Core usando OpenTelemetry su Azure Monitor
Definire il metodo di rilascio in .NET Aspire
.NET Aspire per applicazioni distribuite
Effettuare la ricerca di testo nascosto in una pagina web con Javascript
Utilizzare il Null conditional assignment di C# 14
Controllare la telemetria con .NET Aspire




