Per default, quando eseguiamo una query Entity Framework Core salva le entity recuperate all'interno del contesto. Se una entity si trova già nel contesto, questa viene restituita e i dati provenienti dal database vengono scartati. Entity Framework Core mette a disposizione il metodo AsNoTracking che disabilita il salvataggio dell'entity all'interno del contesto e non cerifica se queste esistano già. Il risultato è che una query che utilizza questo metodo restituisce sempre entity nuove con i dati presenti nel database.
Con la versione 5, è stato introdotto il metodo AsNoTrackingWithIdentityResolution che permette di combinare le funzionalità. Grazie a questo metodo, le entitiy recuperate non vengono salvate nel contesto e non viene fatta la verifica se l'entity esiste già, ma se la query restituisce più volte la stessa entity (un caso molto comune quando si usa Include), viene creata una sola istanza di questa entity.
var people = ctx.People .AsNoTrackingWithIdentityResolution() .Include(p => p.Children) .Where(c => c.CittaNascita == "Roma") .ToList();
In questa query, si recuperano tutte le persone nate a Roma e si includono i figli. Se il figlio di una persona nata a Roma è nato a sua volta a Roma, la sua entity apparirà due volte: una volta nella lista people e una volta nella lista Children dell'entity che rappresenta il padre. Con AsNoTracking verrebbero create due istanze per il figlio, mentre con AsNoTrackingWithIdentityResolution verrebbe creata una sola istanza.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare i named query filter di Entity Framework
From Data to Insight: Exploratory Data Analysis with Python, VS Code and SQL MCP Server
Leggere i parametri da riga di comando in una file based app .NET
Utilizzo del persistent state di Blazor nel prerendering
Esporre workflow come server MCP con Azure Logic Apps
Ottimizzare le API in ASP.NET con Feature Flags
Running workloads and operations with Azure Kubernetes Service
Semplificare i deployment con le label in Azure Container App
Breaking the Legacy Barrier: how to Use AI to Modernize Applications
Personalizzare le pagine di errore su Azure App Service
Impostare automaticamente l'altezza del font tramite CSS
Costruire endpoint SSE in ASP.NET Core


