Sobes.tech
Middle

Cos'è il change tracking?

sobes.tech AI

Risposta dell'AI

Il tracciamento delle modifiche è un meccanismo in ORM (Object-Relational Mapper), come Entity Framework, che tiene traccia dello stato delle entità (oggetti) caricate nel contesto dati. Determina quali entità sono state aggiunte, modificate o eliminate, in modo che al salvataggio delle modifiche nel database vengano eseguiti i comandi appropriati INSERT, UPDATE o DELETE.

Stati delle entità:

  • Added: Oggetto appena creato e aggiunto al contesto, ma non ancora salvato nel database.
  • Unchanged: Oggetto caricato dal database o salvato, senza modifiche.
  • Modified: Uno o più attributi dell'oggetto sono stati modificati dopo il caricamento o il salvataggio.
  • Deleted: Oggetto contrassegnato per essere eliminato dal database.
  • Detached: Oggetto non tracciato dal contesto dati.
// Esempio di tracciamento delle modifiche in Entity Framework Core
using (var context = new MyDbContext())
{
    // Caricare entità
    var myEntity = context.MyEntities.Find(1);

    // Verificare lo stato iniziale
    Console.WriteLine($"Stato iniziale: {context.Entry(myEntity).State}"); // Mostrerà Unchanged

    // Modificare proprietà
    myEntity.MyProperty = "Nuovo Valore";

    // Verificare lo stato dopo modifica
    Console.WriteLine($"Stato dopo modifica: {context.Entry(myEntity).State}"); // Mostrerà Modified

    // Aggiungere una nuova entità
    var newEntity = new MyEntity { MyProperty = "Un'altra Nuova" };
    context.MyEntities.Add(newEntity);

    // Verificare lo stato della nuova entità
    Console.WriteLine($"Stato della nuova entità: {context.Entry(newEntity).State}"); // Mostrerà Added

    // Contrassegnare l'entità per eliminazione
    context.MyEntities.Remove(myEntity);

    // Verificare lo stato dopo eliminazione
    Console.WriteLine($"Stato dopo eliminazione: {context.Entry(myEntity).State}"); // Mostrerà Deleted

    // Salvare le modifiche nel database
    context.SaveChanges();
}