ترحيلات قواعد البيانات في C# (.NET): Entity Framework و FluentMigrator وغيرها من الأساليب

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

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

ابدأ الدورة

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



إدارة تغييرات مخطط قاعدة البيانات هي مهمة بالغة الأهمية عند تطوير أي تطبيق بلغة C# (.NET). تتيح الترحيلات إمكانية إصدار وتتبع وتطبيق تغييرات هيكل قاعدة البيانات (إضافة جداول، أعمدة، فهارس) بشكل تلقائي ومتزامن مع كود التطبيق. في النظام البيئي لـ .NET، توجد عدة أدوات ناضجة لهذه المهمة. في هذه المقالة، سنشرح بالتفصيل ثلاثة أساليب رئيسية: الآلية المدمجة في Entity Framework Core، والمكتبات المتخصصة FluentMigrator و DbUp.



1. ترحيلات Entity Framework Core (EF Core)



الطريقة الأكثر شيوعًا للمشاريع التي تستخدم بالفعل ORM Entity Framework Core. الترحيلات مدمجة بشكل وثيق مع نموذج البيانات الخاص بك (نهج Code-First).



التثبيت والإعداد

للعمل مع الترحيلات، ستحتاج إلى تثبيت الحزمة:

dotnet add package Microsoft.EntityFrameworkCore.Tools


إنشاء وتطبيق الترحيل

بعد تعديل نماذج C# الخاصة بك (مثل إضافة خاصية جديدة Email إلى الفئة User)، قم بتنفيذ الأمر التالي في الطرفية:

dotnet ef migrations add AddEmailToUserdotnet ef database update

الأمر الأول سينشئ ملف ترحيل بكود تم إنشاؤه تلقائيًا بلغة C#. الأمر الثاني سيطبقه على قاعدة البيانات الخاصة بك.



مثال على كود الترحيل (الملف المُنشأ):

public partial class AddEmailToUser : Migration{    protected override void Up(MigrationBuilder migrationBuilder)    {        migrationBuilder.AddColumn<string>(            name: "Email",            table: "Users",            type: "nvarchar(200)",            nullable: true);    }

protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Email", table: "Users"); }}

طريقة Up تطبق التغييرات، وطريقة Down ترجعها.



مزايا وعيوب ترحيلات EF Core

  • الإيجابيات: تكامل وثيق مع النماذج، إنشاء تلقائي للكود، دعم التراجع، مدمج في النظام البيئي لـ .NET.
  • السلبيات: الارتباط بـ EF Core، صعوبة التعامل مع التغييرات غير التقليدية (مثل إعادة تسمية الأعمدة)، احتمالية حدوث مشاكل في التعارضات داخل الفريق.


2. FluentMigrator



هذه مكتبة مستقلة وخفيفة الوزن للترحيلات، غير مرتبطة بأي ORM محدد. تُكتب الترحيلات يدويًا بلغة C# باستخدام واجهة fluent.



التثبيت

dotnet add package FluentMigrator


مثال على الترحيل

[Migration(202310010001)]public class CreateUserTable : Migration{    public override void Up()    {        Create.Table("Users")            .WithColumn("Id").AsInt32().PrimaryKey().Identity()            .WithColumn("Name").AsString(100).NotNullable()            .WithColumn("Email").AsString(200).Nullable();                Create.Index("IX_Users_Email")            .OnTable("Users")            .OnColumn("Email");    }

public override void Down() { Delete.Table("Users"); }}


تشغيل الترحيلات

لتشغيل الترحيلات، يتم استخدام runner. مثال على الإعداد في Program.cs:

var serviceProvider = new ServiceCollection()    .AddFluentMigratorCore()    .ConfigureRunner(rb => rb        .AddSqlServer()        .WithGlobalConnectionString("YourConnectionString")        .ScanIn(typeof(CreateUserTable).Assembly).For.Migrations())    .BuildServiceProvider();

using var scope = serviceProvider.CreateScope();var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();runner.MigrateUp();


مزايا F

توصيات