Entity Framework - التعامل مع Migrations الحساسة (مثل حذف أعمدة أو تغيير أسماء أعمدة).

Entity Framework Core - التعامل مع Migrations الحساسة (مثل حذف أعمدة أو تغيير أسماء أعمدة)


🧠 ما المقصود بالـ Migrations الحساسة؟

Migrations الحساسة تعني التغييرات التي قد تسبب فقدان بيانات أو تعطل النظام إذا لم تتم بعناية، مثل:

  • حذف أعمدة (DROP COLUMN).
  • تغيير أسماء أعمدة (RENAME COLUMN).
  • حذف جداول كاملة.
  • تغيير أنواع بيانات الحقول بطريقة غير متوافقة.
✅ هذه العمليات يجب التعامل معها بحذر شديد لتفادي فقدان البيانات أو فسادها.


🔗 أهم النصائح للتعامل مع Migrations الحساسة

1. لا تحذف الأعمدة مباشرة

- بدلاً من حذف العمود فجأة، ابدأ بوضعه كـ Deprecated لفترة. - أخبر فريق العمل أن هذا العمود سيتم حذفه لاحقًا.


2. خذ نسخة احتياطية دائمًا

- قبل أي عملية حذف أو تعديل على قاعدة الإنتاج، يجب أخذ Backup كامل.


3. استخدم سكربتات SQL مخصصة بدل الاعتماد الكامل على EF Core

- عند حذف أعمدة أو إعادة تسميتها، من الأفضل كتابة سكربت SQL مخصص يدويًا بدلاً من الاعتماد فقط على السكربتات التلقائية.


4. لا تغير اسم العمود مباشرة ➔ استخدم خطوات انتقالية

لو أردت تغيير اسم عمود، اتبع الخطوات التالية:

  • أضف العمود الجديد بالاسم الجديد.
  • انسخ البيانات من العمود القديم إلى العمود الجديد عبر سكربت.
  • بعد فترة وبعد التأكد من أن النظام كله يعمل بالعمود الجديد، قم بحذف العمود القديم.


👨‍💻 مثال عملي على تغيير اسم عمود

السيناريو:

- لدينا جدول Users به عمود BirthDay. - نريد تغييره إلى BirthDate دون فقدان البيانات.

خطوات التنفيذ:


-- 1. إضافة العمود الجديد
ALTER TABLE Users ADD BirthDate DATE;

-- 2. نسخ البيانات
UPDATE Users SET BirthDate = BirthDay;

-- 3. اختبار النظام والتأكد من عمله مع BirthDate.

-- 4. حذف العمود القديم
ALTER TABLE Users DROP COLUMN BirthDay;

✅ بهذه الطريقة تضمن نقل البيانات بأمان بدون فقدان أو مشاكل.


⚡ ملاحظات ذهبية إضافية

  • عند حذف أو تعديل جداول كبيرة، راقب أداء قاعدة البيانات وتوقيت تنفيذ العمليات.
  • سجل جميع التعديلات التي تجريها في مستند تغيير رسمي (Change Log).
  • لا تنفذ التغييرات الحساسة إلا خارج أوقات الذروة التشغيلية للنظام.

تعليقات

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

C# - Arrays

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

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