Entity Framework - نظرة على دورة حياة EF Core (DbContext، Change Tracker، SaveChanges)

Entity Framework - نظرة على دورة حياة EF Core (DbContext، Change Tracker، SaveChanges)

لفهم كيفية عمل Entity Framework Core بفعالية، يجب أن نتعرف على دورة حياة الكائنات داخل EF Core، وخاصة الثلاثة مكونات الأساسية: DbContext، وChange Tracker، وSaveChanges. هذا الدرس يقدم نظرة مبسطة وعملية على كيف تُدار البيانات في الخلفية.


🔹 ما هو DbContext؟

هو الكلاس الرئيسي في EF Core المسؤول عن الاتصال بقاعدة البيانات وتعقب الكيانات (Entities). من خلاله يمكننا الاستعلام (Query) أو الإضافة (Add) أو الحذف (Remove) أو التعديل (Update).


public class AppDbContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

يتم إنشاء كائن من DbContext عادة باستخدام Dependency Injection، ويتم التخلص منه تلقائيًا بعد الاستخدام.


🔸 ما هو Change Tracker؟

Change Tracker هو المكون الذي يتتبع حالة الكيانات (Entities) داخل DbContext. عندما نقوم بتعديل أو إضافة كائن، يقوم EF Core بتسجيل هذه التغييرات داخليًا.

🔁 حالات الكائنات (Entity States):

  • Added: الكائن جديد وسيتم إدراجه عند الحفظ.
  • Modified: تم تعديل بيانات الكائن.
  • Deleted: تم وضع علامة لحذفه.
  • Unchanged: لم يتم إجراء أي تعديل.
  • Detached: غير متصل حاليًا مع DbContext.

var student = context.Students.First();
context.Entry(student).State; // يعرض حالة الكائن

🔻 ما هو SaveChanges؟

SaveChanges هو الميثود المسؤول عن تنفيذ كل العمليات المتعقبة في قاعدة البيانات دفعة واحدة. بمجرد استدعائه، يقوم EF Core بترجمة التغييرات إلى استعلامات SQL وإرسالها إلى قاعدة البيانات.


context.SaveChanges();

يمكن أيضًا استخدام SaveChangesAsync() للعمليات غير المتزامنة (Asynchronous).


🔍 دورة الحياة الكاملة للكيان

  1. نقوم بجلب كائن من قاعدة البيانات أو إنشائه يدويًا.
  2. نقوم بتعديله أو إضافته.
  3. EF Core يتتبع حالته داخليًا (Change Tracker).
  4. عند استدعاء SaveChanges()، يتم إرسال التغييرات إلى قاعدة البيانات.

✅ نصائح مهمة

  • لا تحتفظ بكائن DbContext لفترة طويلة (يُفضل لكل عملية أو لكل Request).
  • يمكنك تعطيل التتبع لتحسين الأداء في عمليات القراءة فقط باستخدام AsNoTracking().
  • استخدم ChangeTracker.DebugView لرؤية تفاصيل التتبع (مفيد أثناء التطوير).

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework