ترحيلات قواعد البيانات في C# (.NET): Entity Framework Migrations

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ترحيلات قواعد البيانات في 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

تجهيز المشروع

\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. مثال على نموذج بسيط:

\n\n
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

لإنشاء أو تحديث قاعدة البيانات إلى أحدث إصدار، نفذ:

\n\n
// عبر PMC\nUpdate-Database\n\n// عبر CLI\ndotnet ef database update\n
\n\n

سينفذ EF جميع الترحيلات غير المطبقة بالترتيب. إذا كانت قاعدة البيانات غير موجودة، سيتم إنشاؤها تلقائيًا.

\n\n

إضافة حقل جديد وإنشاء ترحيل

\n\n

لنفترض أننا قررنا إضافة خاصية CreatedAt إلى نموذج Blog:

\n\n
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\n
Add-Migration                    

توصيات