ردیابی تغییرات دیتابیس یا ChangeTracking در EF

ردیابی تغییرات دیتابیس یا ChangeTracking در EF

وقتی از EF استفاده میکنید. مثلا چیزی Add یا Edit میکنید. EF برای اینکه این تغییرات رو در سمت دیتابیس ذخیره کنه. اول باید بفهمه که چه تغییراتی رخ داده؟! مثلا ایا چیزی Add شده ؟ یا فیلدی ویرایش شده؟ یا شاید شی ای حذف شده. و یا حتی ممکنه شما یه شی رو به کاربر جهت ویرایش نشون بدید ولی کاربر بدون اینکه فیلدی رو تغییر بده رو دکمه “ثبت ویرایش” کلیک کنه. در این حالت حتی EF میفهمه که هیچ تغییری روی این شی انجام نشده. در نتیجه تغییری در سمت دیتابیس هم اعمال نمیکنه.
حالا برای اینکه EF بفهمه این شی شما تغییر کرده یا نه؟ (change tracking یا مکانیزم ردیابی تغیرات) برای این کار از روش اصطلاحا snapshot tracking (تصویر برداری لحظه مثلا) استفاده میکنه.
یعنی وقتی یک شی به context اضافه میشه. میاد و یه نسخه ازش (تصویرش) رو ذخیره میکنه (با مقادیر original ) و به هنگام فراخوانی متد DetectChanges میاد و مقادیر جدید (new value) رو با مقادیر قبلی (original value) مقایسه میکنه و میفهمه که این شی تغییر کرده یا نه. و حتی اینکه کدام فیلد هاش تغییر کره. تا کوئری متناسب با همون تغییرات رو بسازه.
حالا لازم نیست این متد DetectChanges رو خودمون دستی فراخوانی کنیم بلکه با فراخوانی یک سری از متد هایی که در بالا عنوان شده این متد DetectChanges نیز فراخوانی میشه تا این تغییرات رو بفهمه
در EF به این مکانیزم ردیابی تغییرات ChangeTracking گویند. و دیگر هیچ …

change tracking

c# – How change tracking works in Entity Framework – Stack …

Tracking Changes in POCO Entities – MSDN – Microsoft