ترحيلات قواعد البيانات في C# (.NET) باستخدام Entity Framework
\n\nعند تطوير التطبيقات بلغة C# (.NET)، إحدى المهام الأساسية هي مزامنة نموذج البيانات (فئات C#) مع مخطط قاعدة البيانات. يعد التعديل اليدوي للجداول والأعمدة والعلاقات عملية تستغرق وقتًا طويلاً وعرضة للأخطاء. حل هذه المشكلة هو ترحيلات قواعد البيانات، وهي آلية مدمجة في Entity Framework (EF) Core أو Entity Framework 6. تتيح الترحيلات تطبيق التغييرات تلقائيًا على هيكل قاعدة البيانات بناءً على التغييرات في الكود، مع الحفاظ على البيانات الموجودة.
\n\nما هي الترحيلات ولماذا نحتاجها؟
\n\nالترحيل هو مجموعة من التعليمات (كود بلغة C#) تصف كيفية تغيير مخطط قاعدة البيانات من إصدار إلى آخر. بدلاً من كتابة نصوص SQL يدويًا، يقوم المطور بتعديل نماذج C# (على سبيل المثال، إضافة خاصية جديدة إلى فئة)، ويقوم EF بإنشاء ملف ترحيل. ثم يتم تطبيق هذا الملف على قاعدة البيانات.
\n\n- \n
- الأتمتة: يلغي الحاجة إلى كتابة SQL يدويًا. \n
- التحكم في الإصدارات: كل ترحيل هو ملف منفصل بختم زمني، مما يسمح بالتراجع عن التغييرات. \n
- أمان البيانات: عند إضافة عمود، لا يقوم EF بحذف الصفوف الموجودة (ما لم يتم تحديد خلاف ذلك). \n
- العمل الجماعي: يطبق جميع أعضاء الفريق نفس الترحيلات، مما يمنع اختلاف المخططات. \n
تجهيز المشروع
\n\nللعمل مع الترحيلات، يلزم تثبيت الحزمة Microsoft.EntityFrameworkCore.Tools (لـ EF Core) أو EntityFramework (لـ EF6). التثبيت عبر NuGet:
\n\n// لـ EF Core (عبر Package Manager Console)\nInstall-Package Microsoft.EntityFrameworkCore.Tools\n\n// أو عبر .NET CLI\ndotnet add package Microsoft.EntityFrameworkCore.Tools\n\n\nستحتاج أيضًا إلى سياق قاعدة بيانات موروث من DbContext. مثال على نموذج بسيط:
public class Blog\n{\n public int Id { get; set; }\n public string Title { get; set; }\n public string Content { get; set; }\n}\n\npublic class AppDbContext : DbContext\n{\n public DbSet<Blog> Blogs { get; set; }\n\n protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n {\n optionsBuilder.UseSqlServer("Server=(localdb)\\\\mssqllocaldb;Database=MyBlogDb;Trusted_Connection=True;");\n }\n}\n\n\nإنشاء الترحيل الأول
\n\nافتح Package Manager Console (في Visual Studio: View -> Other Windows -> Package Manager Console) أو استخدم .NET CLI. نفذ الأمر:
\n\n// عبر PMC\nAdd-Migration InitialCreate\n\n// أو عبر CLI\ndotnet ef migrations add InitialCreate\n\n\nبعد التنفيذ، سيظهر مجلد Migrations في المشروع مع ملفين:
\n- \n
XXXXXXXXXXXXXX_InitialCreate.cs— فئة الترحيل مع الطريقتينUp()(ما يجب تغييره) وDown()(كيفية التراجع). \n AppDbContextModelSnapshot.cs— لقطة للنموذج الحالي. \n
تطبيق الترحيل على قاعدة البيانات
\n\nلإنشاء أو تحديث قاعدة البيانات إلى أحدث إصدار، نفذ:
\n\n// عبر PMC\nUpdate-Database\n\n// عبر CLI\ndotnet ef database update\n\n\nسينفذ EF جميع الترحيلات غير المطبقة بالترتيب. إذا كانت قاعدة البيانات غير موجودة، سيتم إنشاؤها تلقائيًا.
\n\nإضافة حقل جديد وإنشاء ترحيل
\n\nلنفترض أننا قررنا إضافة خاصية CreatedAt إلى نموذج Blog:
public class Blog\n{\n public int Id { get; set; }\n public string Title { get; set; }\n public string Content { get; set; }\n public DateTime CreatedAt { get; set; } // حقل جديد\n}\n\n\nالآن نقوم بإنشاء ترحيل جديد:
\n\nAdd-Migration