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();
}