Quando eseguiamo una query, Entity Framework tiene traccia degli oggeti recuperati così da poter persistere eventuali modifiche e da poter mantenere una sola istanza in memoria per ogni oggetto letto. Queste funzionalità hanno un costo in termini di performance, quindi, quando abbiamo query in sola lettura, possiamo disabilitarle.
Per disabilitare il tracking a livello di query è sufficiente invocare il metodo AsNoTracking esattamente come mostrato nel prosimo esempio.
using (var ctx = new MyContext())
{
var people1 = ctx.People.AsNoTracking().Where(p => p.Name.StartsWith("S")).ToList();
var people2 = ctx.People.Where(p => p.Name.StartsWith("T")).ToList();
}In questo caso, gli oggetti estratti dalla prima query non vengono tracciati mentre quelli della seconda query vengono tracciati. Questa funzionalità era già presente in Entity Framework 6, ma in Entity Framework Core è stata anche aggiunta la possibilità di disabilitare il tracking a livello di context impostanto la variabile ChangeTracker.QueryTrackingBehavior.
using (var ctx = new MyContext())
{
ctx.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var people1 = ctx.People.Where(p => p.Name.StartsWith("S")).ToList();
var people2 = ctx.People.Where(p => p.Name.StartsWith("T")).ToList();
}In questo caso anche senza il metodo AsNoTracking, gli oggetti della prima e della seconda query non vengono tracciati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Loggare le query più lente con Entity Framework
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Configuratione e utilizzo .NET Aspire CLI
Supportare la crittografia di ASP.NET Core con Azure Container App
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Implementare il throttle in JavaScript
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Gestione ciclo di vita in .NET Aspire
Definire il colore di una scrollbar HTML tramite CSS
Esporre un server MCP esistente con Azure API Management
Utilizzare Hybrid Cache in .NET 9
I più letti di oggi
- Effettuare un clone parziale di un repository di GitHub
- Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
- Personalizzare le pagine di errore su Azure App Service
- Utilizzo delle stepped value functions nel CSS
- Integrare Agenti A2A in Azure API Management
- Self-healing degli unit test con Copilot in GitHub
- Scegliere la strategia di traduzione della Contains in Entity Framework 10
- Usare la disambiguazione con gli extension members in C# 14


