Open Aida-Hagh opened 4 months ago
مثال کاربردی : میخواهیم لیستی از کارمندان را نمایش دهیم و یکی از کارمندان را بهروزرسانی کنیم.
غیر فعال کردن ردیابی (No-Tracking Queries): وقتی نمیخواهیم تغییری در دیتا بیس ایجاد کنیم بهتره از AsNoTracking استفاده کنیم (وقتی کوئری میزنیم).
// بازیابی لیست کارمندان بدون ردیابی تغییرات
var employees = context.Employees.AsNoTracking().ToList();
foreach (var employee in employees)
{
Console.WriteLine($"Employee ID: {employee.Id}, Name: {employee.Name}, Position: {employee.Position}");
}
کاربرد ردیابی تغییرات در دستورات (Commands): در دستورات Add, Update و Delete، ردیابی تغییرات برای مدیریت این عملیاتها ضروری است.
// یافتن کارمند با ID مشخص
var employee = context.Employees.FirstOrDefault(e => e.Id == 1);
if (employee != null)
{
// بهروزرسانی اطلاعات کارمند
employee.Name = "Updated Name";
employee.Position = "Updated Position";
// اعمال تغییرات به دیتابیس
context.SaveChanges();
}
این ابزار وضعیت اشیاء را در طول چرخهی عمرشان داخل DbContext پیگیری میکند و تغییرات اعمال شده بر روی اشیاء را زیر نظر میگیرد و به EF Core کمک میکند تا هنگام فراخوانی متد SaveChanges، تغییرات را بهدرستی در پایگاه داده اعمال کند.
مفاهیم کلیدی Change Tracker: وضعیتهای شیء: اشیاء که توسط Change Tracker پیگیری میشوند میتوانند در یکی از چند وضعیت زیر باشند: Added (افزوده شده): شیء جدید است و باید در پایگاه داده درج شود. Modified (تغییر یافته): برخی یا تمام خصوصیات شیء تغییر کردهاند. Deleted (حذف شده): شیء باید از پایگاه داده حذف شود. Unchanged (بدون تغییر): شیء تغییری نکرده و نیازی به اعمال تغییرات در پایگاه داده ندارد. Detached (جدا شده): شیء توسط DbContext پیگیری نمیشود.
فرض کنید یک مدل به نام Employee داریم و می خواهیم یک شیء Employee جدید ایجاد و آن را به DbContext اضافه کنیم : در این مثال وقتی شیء employee به DbContext اضافه میشود، وضعیت آن Added است. پس از فراخوانی SaveChanges و درج شیء در پایگاه داده، وضعیت آن به Unchanged تغییر میکند.
using (var context = new AppDbContext()) {
}
میتوانیم وضعیت یک شیء را به صورت دستی تغییر دهیم. به عنوان مثال:
using (var context = new AppDbContext()) {
}
در اینجا، تغییر وضعیت به Modified به EF Core اطلاع میدهد که این شیء باید بهروزرسانی شود و تغییرات آن در پایگاه داده اعمال شود.