Cos'è il tracking in Entity Framework?
sobes.tech AI
Risposta dell'AI
Il tracking (Entity Tracking) è un meccanismo in Entity Framework Core che monitora le modifiche apportate agli oggetti di entità caricati dal database. Il contesto memorizza informazioni sullo stato di ogni entità caricata e può generare query SQL per aggiornare il database al momento del salvataggio delle modifiche (DbContext.SaveChanges()).
Gli stati principali delle entità:
- Added: L’entità è stata aggiunta al contesto, ma non esiste ancora nel database.
- Unchanged: L’entità è stata caricata dal database e le sue proprietà non sono state modificate.
- Modified: Alcune proprietà dell’entità sono state modificate dalla sua caricamento dal database.
- Deleted: L’entità è stata contrassegnata per l’eliminazione dal database.
- Detached: L’entità non è monitorata dal contesto.
Per impostazione predefinita, le entità vengono monitorate durante l’utilizzo di query LINQ. Questo permette a Entity Framework di determinare automaticamente quali modifiche devono essere salvate.
Esempio di indicazione esplicita del tracking:
// Query monitorata
var trackedUser = context.Users.FirstOrDefault(u => u.Id == 1);
// Query non monitorata
var untrackedUser = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == 2);
Disattivare il tracking con AsNoTracking() può migliorare le prestazioni durante l’esecuzione di query, se non è necessario salvare modifiche nel database, poiché EF non consuma risorse per monitorare lo stato delle entità.