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
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Utilizzare WebJobs su Linux con Azure App Service
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
.NET Aspire per applicazioni distribuite
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Gestire progetti NPM in .NET Aspire
Gestione degli eventi nei Web component HTML
Testare il failover sulle region in Azure Storage
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Gestire gli accessi con Token su Azure Container Registry