Entity Framework - كيف يتابع EF Core التغييرات؟
Entity Framework Core - كيف يتابع EF Core التغييرات؟
EF Core يستخدم آلية ذكية تسمى Change Tracking لتتبع حالة الكائنات التي يتم جلبها من قاعدة البيانات، ومعرفة ما إذا تم تعديلها، إضافتها، أو حذفها، ثم تحويل هذه التغييرات إلى استعلامات SQL عند استدعاء SaveChanges()
.
🔹 حالات الكيانات (Entity States) التي يتابعها EF Core:
- Added: الكائن جديد وسيتم إضافته إلى قاعدة البيانات.
- Unchanged: الكائن لم يتم تغييره منذ تحميله من قاعدة البيانات.
- Modified: الكائن تم تعديله وسينفذ استعلام UPDATE عليه.
- Deleted: الكائن تم حذفه وسينفذ استعلام DELETE عليه.
- Detached: الكائن غير متصل حاليًا بـ DbContext.
🔹 كيف يعمل Change Tracking عمليًا؟
// تحميل طالب ثم تعديل اسمه
var student = await dbContext.Students.FirstOrDefaultAsync(s => s.Id == 1);
student.Name = "اسم جديد"; // EF Core يتعرف على التغيير تلقائيًا
await dbContext.SaveChangesAsync(); // ينفذ UPDATE تلقائيًا بناءً على التغيير
---
🔹 مثال لعرض حالة الكيان:
// التحقق من حالة الكيان
var student = await dbContext.Students.FirstOrDefaultAsync();
Console.WriteLine(dbContext.Entry(student).State); // النتيجة Unchanged
student.Name = "اسم آخر";
Console.WriteLine(dbContext.Entry(student).State); // النتيجة Modified
---
🔹 شرح إضافي مهم:
- Entry().State: يسمح لك بالتحقق أو تعديل حالة الكيان يدويًا.
- SaveChanges: يعتمد على حالات الكيانات لتنفيذ الأوامر المناسبة (Insert / Update / Delete).
🔹 ملاحظات إضافية:
- ✅ Change Tracking يحدث تلقائيًا عند تحميل الكائنات من قاعدة البيانات.
- ✅ يمكنك إيقاف Change Tracking إذا أردت تحسين الأداء باستخدام
AsNoTracking()
عند القراءة فقط.
✅ فهم آلية تتبع التغييرات في EF Core مهم جدًا لبناء تطبيقات آمنة وذات أداء ممتاز.
تعليقات
إرسال تعليق