Sobes.tech
Middle

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à.