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