Migrations در EF Core چیست؟
مکانیزم نسخهبندی و اعمال تدریجی تغییرات اسکیمای دیتابیس بر اساس تغییرات مدل C#، بدون نوشتن دستی اسکریپت SQL.
چرا مهم است؟
بدون Migrations، هماهنگ نگهداشتن اسکیمای دیتابیس با مدل کد بین چند توسعهدهنده و محیط (Dev/Staging/Prod) دستی و مستعد خطا میشود؛ Migrations این فرآیند را قابل ردیابی و تکرارپذیر میکند.
گردش کار پایه
dotnet ef migrations add AddProductPriceColumn
dotnet ef database update
دستور اول یک فایل Migration (شامل کد Up/Down) بر اساس تفاوت مدل فعلی با آخرین Migration میسازد؛ دستور دوم آن را روی دیتابیس واقعی اعمال میکند.
نمونه فایل Migration
public partial class AddProductPriceColumn : Migration
{
protected override void Up(MigrationBuilder builder) =>
builder.AddColumn<decimal>(name: "Price", table: "Products", nullable: false, defaultValue: 0m);
protected override void Down(MigrationBuilder builder) =>
builder.DropColumn(name: "Price", table: "Products");
}
نکات مهم
- هر Migration باید کوچک و قابل بازگشت (
Down) باشد. - Migrationها را Commit کنید و در Code Review بررسی کنید — تغییر اسکیما به همان اندازه کد منطقی مهم است.
اشتباه رایج
❌ تغییر دستی دیتابیس Production (مثلاً اضافهکردن ستون از طریق SSMS) بدون ساخت Migration متناظر — این کار باعث میشود اسکیمای واقعی از تاریخچه Migrationها خارج (Drift) شود و اجرای Migration بعدی روی محیط دیگر شکست بخورد.
منبع و مطالعه بیشتر
خلاصه
Migrations تغییرات اسکیمای دیتابیس را بهصورت نسخهبندیشده و تکرارپذیر از روی تفاوت مدل C# میسازد و اعمال میکند. هرگز دیتابیس Production را دستی بدون Migration متناظر تغییر ندهید. مرجع کامل: مدیریت Migrations، Microsoft Learn.
