Sobes.tech
Middle

Какво е проследяване на промени (change tracking)?

sobes.tech AI

Отговор от AI

Проследяването на промените е механизъм в ORM (Object-Relational Mapper), като Entity Framework, който следи състоянието на същностите (обектите), заредени в контекста на данните. Той определя кои същности са добавени, променени или изтрити, за да се изпълнят съответните команди INSERT, UPDATE или DELETE при запазване на промените в базата данни.

Състояния на същностите:

  • Added: Обектът току-що е създаден и добавен към контекста, но все още не е запазен в базата данни.
  • Unchanged: Обектът е зареден от базата данни или е запазен, без да са направени промени.
  • Modified: Едно или повече свойства на обекта са променени след зареждането или запазването му.
  • Deleted: Обектът е маркиран за изтриване от базата данни.
  • Detached: Обектът не се следи от контекста на данните.
// Пример за проследяване на промени в Entity Framework Core
using (var context = new MyDbContext())
{
    // Зареждане на същност
    var myEntity = context.MyEntities.Find(1);

    // Проверка на началното състояние
    Console.WriteLine($"Начално състояние: {context.Entry(myEntity).State}"); // Ще покаже Unchanged

    // Промяна на свойство
    myEntity.MyProperty = "Нова стойност";

    // Проверка на състоянието след промяната
    Console.WriteLine($"Състояние след промяната: {context.Entry(myEntity).State}"); // Ще покаже Modified

    // Добавяне на нова същност
    var newEntity = new MyEntity { MyProperty = "Още една нова" };
    context.MyEntities.Add(newEntity);

    // Проверка на състоянието на новата същност
    Console.WriteLine($"Състояние на новата същност: {context.Entry(newEntity).State}"); // Ще покаже Added

    // Маркиране на същност за изтриване
    context.MyEntities.Remove(myEntity);

    // Проверка на състоянието след изтриване
    Console.WriteLine($"Състояние след изтриване: {context.Entry(myEntity).State}"); // Ще покаже Deleted

    // Запазване на промените в базата данни
    context.SaveChanges();
}