Middle
Czym jest śledzenie zmian (change tracking)?
sobes.tech AI
Odpowiedź od AI
Śledzenie zmian to mechanizm w ORM (Object-Relational Mapper), takim jak Entity Framework, który monitoruje stan encji (obiektów) załadowanych do kontekstu danych. Określa, które encje zostały dodane, zmodyfikowane lub usunięte, aby podczas zapisywania zmian w bazie danych wykonywały się odpowiednie polecenia INSERT, UPDATE lub DELETE.
Stany encji:
- Added: Obiekt właśnie utworzony i dodany do kontekstu, ale jeszcze nie zapisany w bazie danych.
- Unchanged: Obiekt załadowany z bazy danych lub zapisany, bez wprowadzonych zmian.
- Modified: Jeden lub więcej atrybutów obiektu zostało zmienionych po jego załadowaniu lub zapisaniu.
- Deleted: Obiekt oznaczony do usunięcia z bazy danych.
- Detached: Obiekt nie jest śledzony przez kontekst danych.
// Przykład śledzenia zmian w Entity Framework Core
using (var context = new MyDbContext())
{
// Załaduj encję
var myEntity = context.MyEntities.Find(1);
// Sprawdź stan początkowy
Console.WriteLine($"Stan początkowy: {context.Entry(myEntity).State}"); // Wyświetli Unchanged
// Zmień właściwość
myEntity.MyProperty = "Nowa wartość";
// Sprawdź stan po zmianie
Console.WriteLine($"Stan po modyfikacji: {context.Entry(myEntity).State}"); // Wyświetli Modified
// Dodaj nową encję
var newEntity = new MyEntity { MyProperty = "Kolejna nowa" };
context.MyEntities.Add(newEntity);
// Sprawdź stan nowej encji
Console.WriteLine($"Stan nowej encji: {context.Entry(newEntity).State}"); // Wyświetli Added
// Oznacz encję do usunięcia
context.MyEntities.Remove(myEntity);
// Sprawdź stan po usunięciu
Console.WriteLine($"Stan po usunięciu: {context.Entry(myEntity).State}"); // Wyświetli Deleted
// Zapisz zmiany
context.SaveChanges();
}