Entity Framework - شرح كيف يتم تحويل Migrations إلى تغييرات حقيقية في الجداول.

Entity Framework Core - كيف يتم تحويل Migrations إلى تغييرات حقيقية في الجداول؟


🧠 نظرة عامة

عندما تنشئ Migration ثم تنفذ Update-Database، يقوم Entity Framework Core بتحويل التعليمات البرمجية الموجودة داخل ملفات الـ Migration إلى أوامر SQL حقيقية يتم تنفيذها على قاعدة البيانات.

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


🔗 المراحل التفصيلية لتحويل Migration إلى تغييرات حقيقية

  1. قراءة ملفات Migration: EF Core يقرأ جميع ملفات Migration التي لم يتم تنفيذها (بمقارنة الجدول __EFMigrationsHistory مع ملفات المشروع).
  2. تحليل أوامر التغيير: يحلل الـ C# Code المكتوب داخل ملفات Migration (مثل CreateTable, AddColumn, AlterColumn).
  3. توليد سكربت SQL: يحول التعليمات البرمجية إلى أوامر SQL متوافقة مع نوع قاعدة البيانات المستخدمة (SQL Server, MySQL, PostgreSQL, إلخ).
  4. فتح اتصال بقاعدة البيانات: ينشئ اتصال باستخدام الـ Connection String المحددة في الإعدادات.
  5. تنفيذ أوامر SQL: ينفذ الأوامر واحدة تلو الأخرى (إنشاء جداول، إضافة أعمدة، إنشاء مفاتيح أساسية وأجنبية، إنشاء Indexes...إلخ).
  6. تحديث جدول التاريخ: يسجل اسم كل Migration تم تنفيذها في جدول __EFMigrationsHistory لضمان عدم تكرار التنفيذ لاحقًا.

👨‍💻 مثال عملي على التحويل

لنفترض أن لديك الكود التالي داخل Migration:


migrationBuilder.CreateTable(
    name: "Books",
    columns: table => new
    {
        BookId = table.Column<int>(nullable: false)
            .Annotation("SqlServer:Identity", "1, 1"),
        Title = table.Column<string>(nullable: true)
    },
    constraints: table =>
    {
        table.PrimaryKey("PK_Books", x => x.BookId);
    });

عند تنفيذ Update-Database، يقوم EF Core بتحويل هذا الكود إلى أمر SQL مشابه:


CREATE TABLE Books (
    BookId INT IDENTITY(1,1) NOT NULL,
    Title NVARCHAR(MAX),
    CONSTRAINT PK_Books PRIMARY KEY (BookId)
);

✅ ثم ينفذ هذا السكربت فعليًا على قاعدة البيانات، وينشئ الجدول Books داخلها.


🔍 ماذا يحدث لو عدلت على Model بعد تنفيذ Migration؟

لو قمت بتعديل الكلاس Book (مثلاً أضفت خاصية جديدة Author)، تحتاج إلى:

  • إنشاء Migration جديدة بالأمر Add-Migration AddAuthorToBook.
  • ثم تنفيذ Update-Database.

🔹 فيقوم EF Core بتوليد أمر SQL لإضافة عمود جديد داخل جدول Books.


ALTER TABLE Books
ADD Author NVARCHAR(MAX);

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

  • كل تغيير صغير في Models يتطلب إنشاء Migration جديدة وتحديث قاعدة البيانات.
  • في المشاريع الكبيرة، تأكد من مراجعة سكربتات SQL قبل تنفيذ Update-Database خاصة على بيئات الإنتاج.
  • يمكنك رؤية السكربت بدون تنفيذه باستخدام الأمر:
    
    Script-Migration
        

تعليقات

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

C# - Arrays

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

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