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