عمليات الترحيل وإدارة المخطط
أنشئوا عمليات الترحيل وطبّقوها وتراجعوا عنها لتطوير مخطط قاعدة البيانات بأمان.
عمليات الترحيل وإدارة المخطط درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
ما هي ترحيلات EF Core؟
الترحيلات هي ملفات منشأة برمجيًا تصف التغييرات التدريجية في مخطط قاعدة البيانات. وبدلًا من كتابة DDL بلغة SQL يدويًا، تنشئ EF Core هذه التغييرات وتطبّقها تلقائيًا، مما يحافظ على التزامن بين الكود وقاعدة البيانات.
تثبيت أدوات EF Core
يجب تثبيت أداة CLI الخاصة بـ EF Core (dotnet-ef) بشكل عام، أو تثبيتها كأداة محلية، لتشغيل أوامر الترحيلات من الطرفية.
# Install globally
dotnet tool install --global dotnet-ef
# Verify
dotnet ef --version
# Required NuGet packages in your project:
# Microsoft.EntityFrameworkCore.Design
# Microsoft.EntityFrameworkCore.SqlServer (or Sqlite, etc.)إنشاء أول ترحيل لك
يقارن dotnet ef migrations add النموذج الحالي بآخر لقطة محفوظة، ثم ينشئ ملف ترحيل يتضمن أسلوبي Up() (للتطبيق) وDown() (للتراجع).
# Create initial migration
dotnet ef migrations add InitialCreate
# Output files created:
# Migrations/20240101_InitialCreate.cs <- Up/Down
# Migrations/20240101_InitialCreate.Designer.cs
# Migrations/AppDbContextModelSnapshot.cs <- current modelمحتويات ملف الترحيل
يحتوي كل ترحيل على أسلوب Up (لتطبيق التغييرات) وأسلوب Down (للتراجع عنها). وتنشئ EF Core هذين الأسلوبين تلقائيًا اعتمادًا على الفروقات بين النماذج.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Products",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(maxLength: 200, nullable: false),
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
},
constraints: table => table.PrimaryKey("PK_Products", x => x.Id));
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "Products");
}
}تطبيق الترحيلات
يطبّق dotnet ef database update جميع الترحيلات المعلّقة. وتتتبّع EF Core الترحيلات التي نُفّذت في جدول __EFMigrationsHistory.
# Apply all pending migrations
dotnet ef database update
# Apply up to a specific migration
dotnet ef database update AddProductIndex
# Roll back to a previous migration
dotnet ef database update InitialCreateتطبيق الترحيل برمجيًا عند بدء التشغيل
في بيئة الإنتاج، يمكنك تطبيق الترحيلات برمجيًا عند بدء التشغيل، بحيث تكون قاعدة البيانات محدثة دائمًا دون الحاجة إلى خطوات يدوية باستخدام CLI.
var app = builder.Build();
// Apply pending migrations at startup
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
await db.Database.MigrateAsync();
}
app.Run();إضافة عمود في ترحيل جديد
أضف خاصية إلى الكيان، ثم أنشئ ترحيلًا جديدًا. تكتشف EF Core التغيير وتنشئ عملية AddColumn.
// 1. Add property to entity
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = "";
public decimal Price { get; set; }
public string? Description { get; set; } // NEW
}
// 2. Generate migration
// dotnet ef migrations add AddProductDescription
// Generated Up():
migrationBuilder.AddColumn<string>(
name: "Description",
table: "Products",
nullable: true);تهيئة البيانات في الترحيلات
استخدم HasData داخل OnModelCreating لتهيئة البيانات المرجعية. وتضمّنها EF Core في أسلوب Up للترحيل على هيئة عبارات INSERT.
modelBuilder.Entity<Category>().HasData(
new Category { Id = 1, Name = "Electronics" },
new Category { Id = 2, Name = "Books" },
new Category { Id = 3, Name = "Clothing" }
);
// Then regenerate the migration:
// dotnet ef migrations add SeedCategoriesSQL مخصص في الترحيلات
عندما تحتاج إلى DDL لا تستطيع EF Core إنشاءه تلقائيًا، مثل المشغّلات وطرق العرض والإجراءات المخزنة، استخدم migrationBuilder.Sql().
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"
CREATE VIEW vw_ActiveProducts AS
SELECT Id, Name, Price
FROM Products
WHERE IsActive = 1
");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("DROP VIEW vw_ActiveProducts");
}إزالة ترحيل
إذا لم تكن قد طبّقت ترحيلًا بعد، فيمكنك حذفه باستخدام dotnet ef migrations remove. ولا يمكن إزالة سوى الترحيل الأخير بهذه الطريقة.
# Remove the last unapplied migration
dotnet ef migrations remove
# List all migrations and their status
dotnet ef migrations list
# Script all migrations to SQL (for DBA review)
dotnet ef migrations script --output deploy.sqlتطبيق عملي: استراتيجية الترحيلات في CI/CD
في مسار CI/CD، أنشئ نص ترحيل ودَع مسؤول قاعدة البيانات يراجعه قبل تطبيقه على بيئة الإنتاج — لا تشغّل MigrateAsync() دون مراجعة في أنظمة الإنتاج الحرجة.
# Generate idempotent script for all pending migrations
dotnet ef migrations script --idempotent --output migrations.sql
# Review migrations.sql, then apply via sqlcmd / psql:
# sqlcmd -S server -d db -i migrations.sqlاختبار سريع
ما جدول EF Core الذي يتتبّع الترحيلات التي طُبّقت بالفعل على قاعدة البيانات؟
مراجعة: الترحيلات وإدارة المخطط
أهم النقاط:
- ينشئ
dotnet ef migrations add <Name>ملفات التغييرات التدريجية في المخطط - يحتوي كل ترحيل على أسلوبي
Up()(للتطبيق) وDown()(للتراجع) - يطبّق
dotnet ef database updateالترحيلات المعلّقة - استخدم
MigrateAsync()عند بدء تشغيل التطبيق لأتمتة عمليات النشر - أنشئ نصوص SQL قابلة للتنفيذ بأمان أكثر من مرة لمراجعة مسؤول قاعدة البيانات في مسارات الإنتاج
الأسئلة الشائعة
هل درس «عمليات الترحيل وإدارة المخطط» مجاني؟
نعم — نص درس «عمليات الترحيل وإدارة المخطط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «عمليات الترحيل وإدارة المخطط»؟
أنشئوا عمليات الترحيل وطبّقوها وتراجعوا عنها لتطوير مخطط قاعدة البيانات بأمان. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «عمليات الترحيل وإدارة المخطط»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات DbContext وDbSet
- عمليات الترحيل وإدارة المخطط
- عمليات CRUD باستخدام EF Core
- العلاقات: واحد إلى متعدد ومتعدد إلى متعدد