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
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Configurare e gestire sidecar container in Azure App Service
Definire il colore di una scrollbar HTML tramite CSS
Configuratione e utilizzo .NET Aspire CLI
Centralizzare gli endpoint AI Foundry con Azure API Management
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare DeepSeek R1 con Azure AI
Ridurre il reflow ottimizzando il CSS
Applicare un filtro per recuperare alcune issue di GitHub
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Ridurre il reflow cambiando il CSS