Sobes.tech
Middle

Co je sledování změn (change tracking)?

sobes.tech AI

Odpověď od AI

Sledování změn je mechanismus v ORM (Object-Relational Mapper), například v Entity Framework, který sleduje stav entit (objektů) načtených v datovém kontextu. Určuje, které entity byly přidány, změněny nebo odstraněny, aby při ukládání změn do databáze byly provedeny příslušné příkazy INSERT, UPDATE nebo DELETE.

Stavy entit:

  • Added: Objekt právě vytvořený a přidaný do kontextu, ale ještě uložený v databázi.
  • Unchanged: Objekt načtený z databáze nebo uložený, bez provedených změn.
  • Modified: Jeden nebo více atributů objektu bylo změněno po jeho načtení nebo uložení.
  • Deleted: Objekt označený k odstranění z databáze.
  • Detached: Objekt není sledován datovým kontextem.
// Příklad sledování změn v Entity Framework Core
using (var context = new MyDbContext())
{
    // Načtení entity
    var myEntity = context.MyEntities.Find(1);

    // Kontrola počátečního stavu
    Console.WriteLine($"Počáteční stav: {context.Entry(myEntity).State}"); // Zobrazí Unchanged

    // Změna vlastnosti
    myEntity.MyProperty = "Nová hodnota";

    // Kontrola stavu po změně
    Console.WriteLine($"Stav po změně: {context.Entry(myEntity).State}"); // Zobrazí Modified

    // Přidání nové entity
    var newEntity = new MyEntity { MyProperty = "Další nová" };
    context.MyEntities.Add(newEntity);

    // Kontrola stavu nové entity
    Console.WriteLine($"Stav nové entity: {context.Entry(newEntity).State}"); // Zobrazí Added

    // Označení entity k odstranění
    context.MyEntities.Remove(myEntity);

    // Kontrola stavu po odstranění
    Console.WriteLine($"Stav po odstranění: {context.Entry(myEntity).State}"); // Zobrazí Deleted

    // Uložení změn do databáze
    context.SaveChanges();
}