Sobes.tech
Middle

Ce este urmărirea modificărilor (change tracking)?

sobes.tech AI

Răspuns de la AI

Urmărirea modificărilor este un mecanism în ORM (Object-Relational Mapper), cum ar fi Entity Framework, care urmărește starea entităților (obiectelor) încărcate în contextul de date. Acesta determină care entități au fost adăugate, modificate sau eliminate, astfel încât la salvarea modificărilor în bază de date să fie executate comenzile corespunzătoare INSERT, UPDATE sau DELETE.

Stările entităților:

  • Added: Obiect nou creat și adăugat în context, dar încă neînregistrat în bază.
  • Unchanged: Obiect încărcat din bază sau salvat, fără modificări.
  • Modified: Unul sau mai multe proprietăți ale obiectului au fost modificate după încărcare sau salvare.
  • Deleted: Obiect marcat pentru ștergere din bază.
  • Detached: Obiect care nu este urmărit de contextul de date.
// Exemplu de urmărire a modificărilor în Entity Framework Core
using (var context = new MyDbContext())
{
    // Încărcare entitate
    var myEntity = context.MyEntities.Find(1);

    // Verificare stare inițială
    Console.WriteLine($"Stare inițială: {context.Entry(myEntity).State}"); // Va afișa Unchanged

    // Modificare proprietate
    myEntity.MyProperty = "Valoare Nouă";

    // Verificare stare după modificare
    Console.WriteLine($"Stare după modificare: {context.Entry(myEntity).State}"); // Va afișa Modified

    // Adăugare entitate nouă
    var newEntity = new MyEntity { MyProperty = "Altă Nouă" };
    context.MyEntities.Add(newEntity);

    // Verificare stare entitate nouă
    Console.WriteLine($"Stare entitate nouă: {context.Entry(newEntity).State}"); // Va afișa Added

    // Marcare entitate pentru ștergere
    context.MyEntities.Remove(myEntity);

    // Verificare stare după ștergere
    Console.WriteLine($"Stare după ștergere: {context.Entry(myEntity).State}"); // Va afișa Deleted

    // Salvare modificări
    context.SaveChanges();
}