Entity Framework - العمل مع Migration History Table.

Entity Framework Core - العمل مع Migration History Table


🧠 ما هو Migration History Table؟

جدول __EFMigrationsHistory هو جدول خاص تقوم Entity Framework Core بإنشائه داخل قاعدة البيانات بشكل تلقائي. مهمة هذا الجدول:

  • تسجيل كل Migration تم تنفيذها بالفعل على قاعدة البيانات.
  • مساعدة EF Core في معرفة أي Migrations تم تنفيذها وأيها لم يتم بعد.
  • تسهيل التراجع أو التقدم في Migrations حسب الحاجة.


📄 شكل جدول __EFMigrationsHistory

الجدول يحتوي عادة على عمودين رئيسيين:

  • MigrationId: اسم الـ Migration المنفذة.
  • ProductVersion: نسخة EF Core التي استخدمت أثناء إنشاء هذه Migration.

مثال على محتويات هذا الجدول:


+--------------------------------------+-------------------+
| MigrationId                         | ProductVersion     |
+--------------------------------------+-------------------+
| 20240427093000_InitialCreate         | 8.0.4             |
| 20240427101500_AddProductsTable      | 8.0.4             |
| 20240427113000_AddCategoriesTable    | 8.0.4             |
+--------------------------------------+-------------------+

🔗 ماذا يحدث أثناء تنفيذ Update-Database؟

عندما تنفذ Update-Database:

  • EF Core يقارن قائمة Migrations الموجودة في مشروعك مع السجلات داخل جدول __EFMigrationsHistory.
  • يحدد Migrations الجديدة التي لم تنفذ بعد.
  • ينفذ سكربتات SQL الخاصة بها.
  • يضيف سجلات جديدة إلى __EFMigrationsHistory لكل Migration تم تنفيذها.


👨‍💻 متى تحتاج التحقق من جدول __EFMigrationsHistory؟

  • عند مواجهة مشكلة أن بعض الجداول غير موجودة.
  • عند محاولة التراجع أو التقدم إلى Migration معينة ولم تعمل كما هو متوقع.
  • عند استكشاف أخطاء Migrations في بيئات الإنتاج أو الاختبار.

✅ يكفي تنفيذ استعلام SQL بسيط لرؤية حالة الجدول:


SELECT * FROM __EFMigrationsHistory

⚡ ملاحظات مهمة

  • لا تعدل جدول __EFMigrationsHistory يدويًا إلا إذا كنت تعرف جيدًا ماذا تفعل (ممكن أن تسبب مشاكل تزامن خطيرة).
  • يجب أن يتطابق ما هو موجود في جدول __EFMigrationsHistory مع ملفات Migrations الموجودة في مشروعك.
  • يمكنك استخدام هذا الجدول لتحديد آخر نقطة تم الوصول إليها في تطوير قاعدة البيانات.

تعليقات

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

C# - Arrays

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

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