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 azurite come simulatore di Azure Storage
Impostare l'hostname di un'immagine docker per rendere il container da altri container in Visual Studio
Effettuare un loop di una GitHub Action
Gestire query string lunghe in ASP.NET Core
Disegnare un'applicazione web sfruttando il micro-frontend pattern
Taggare le query create con EF Core con informazioni di debug sul codice
Integrare e trasformare dati con Azure Data Factory
Iniettare servizi in un hosted service di ASP.NET Core
Aggiungere temi custom a Blazor
Impostare l'identity resolution a livello globale in una No-Tracking query di Entity Framework Core
Caricare immagini a differenti risoluzioni in HTML con srcset
Eseguire chiamate hedging gRPC con ASP.NET Core 6