مقدمات Migrations در Entity Framework Core
در پروژه های دنیای واقعی، زمانی که امکانات جدید در نرم افزار پیاده سازی می شود، دیتا مدل ها تغییر می کنند: صفت ها و یا مشخصه های جدید اضافه و یا حذف می شوند، و در نتیجه schema دیتابیس ها باید تغییر کنند تا با اپلیکیشن ها هماهنگ بمانند. ویژگی migrations در EF Core یک راه را برای آپدیت کردن تدریجی schema دیتابیس به منظور هماهنگ نگه داشتن آن با دیتا مدل اپلیکیشن و درآن واحد نگه داری از دیتای موجود در دیتابیس فراهم می کند.
به طور کلی، کارکرد migrations به این صورت می باشد:
- وقتی یک دیتا مدل تغییر می کند، توسعه دهنده از ابزار EF Core برای اضافه کردن یک migration که آپدیت های ضروری را برای هماهنگ نگه داشتن schema دیتابیس تعریف می کند، استفاده می کند. EF Core برای مشخص کردن تفاوت ها میان مدل فعلی و مدل قدیمی، مدل فعلی را با یک نگاه اجمالی با مدل قدیمی مقایسه کرده و فایل های migration source را تولید می کند؛ فایل ها می توانند در source control پروژه ی شما مانند هر source file دیگری دنبال شوند.
- هنگامی که یک migration جدید تولید شد، می تواند روی دیتابیس به روش های مختلفی اعمال شود. EF Core تمام migration های اعمال شده را در یک history table مخصوص ذخیره کرده و به آن اجازه می دهد که بداند کدام یک از migration ها اعمال شده و کدام اعمال نشدند.
ادامه ی این مطلب راهنمای قدم به قدم برای افراد مبتدی به منظور استفاده از migration ها می باشد.
شروع کار با Migration در EF Core
فرض کنید اخیرا اولین برنامه خود را با اسفاده از EF Core نوشته اید، که شامل مدل ساده ی زیر می باشد:
در هنگام توسعه دادن، ممکن است از Create and Drop APIs برای تکرار کردن سریع استفاده کرده باشید، تغییر دادن مدل برنامه نیاز است اما حال که برنامه شما در دست انتشار است، احتمالا به یک روش ایمن برای به روز رسانی schema دیتابیس بدون منحل کردن کل دیتابیس نیاز دارید.
نصب ابزارهای Migration
ابتدا، شما باید EF Core command-line toolsرا نصب کنید:
- ما معمولا استفاده از .NET Core CLI tools را که تقریبا روی تمام پلتفرم ها کار می کند را پیشنهاد می کنیم.
- اگر شما بیشتر تمایل به استفاده از Visual Studio را دارید یا تجربه ی استفاده از EF6 migrations را دارید، می توانید همچنین از Package Manager Console tools استفاده کنید.
ساخت اولین migration در EF Core
حالا شما آماده هستید تا اولین migration خود را اضافه کنید! به EF Core دستور بدهید تا یک migration به نام InitialCreate بسازد:
Add-Migration InitialCreate
EF Core یک پوشه به نام Migrations در پروژه های شما می سازد، و چند فایل تولید می کند. این ایده ی خوبی است که بررسی کنید EF Core دقیقا چه چیزی تولید کرده است ( یا شاید اصلاح کرده است ) اما ما فعلا کاری به آن نداریم.
ساخت database و schemaدر اینجا می توانید دیتابیس خود را ساخته و schema خود را از migration بوجود آورید. این عمل بصورت زیر انجام می شود:
Update-Database
همین کافی است، اپلیکیشن شما آماده است تا روی دیتابیس جدیدتان اجرا شود، در صورتی که شما نیازی ندارید تا حتی یک خط از SQL را بنویسید. این را به یاد داشته باشید که این راه اعمال migrations برای توسعه دادن شخصی مناسب است، اما برای محیط های اجرا زیاد مناسب نیست.
توسعه دادن مدل
چند روزی گذشته است و از شما خواسته می شود تا یک creation timestamp به بلاگ های خود اضافه کنید. شما تغییرات ضروری را روی اپلیکیشن خود انجام دادید و مدل تان حالا به این شکل در می آید:
مدل و دیتابیس شما حالا sync نیستند زیرا ویژگی CreationTimestamp به مدل شما اضافه شده است بنابراین، ما باید یک ستون جدید به دیتابیس اضافه کنیم. حال بیایید یک migration جدید بسازیم:
Add-Migration AddBlogCreatedTimestamp
یادتان باشد که ما به migrations یک نام توصیفی می دهیم تا بعدا راحت تر تاریخچه تغییرات مدل در پروژه را درک کنیم. از آنجا که این اولین migration پروژه نمی باشد، EF Core مدل آپدیت شده ی شما را با مدل قدیمی مقایسه می کند، قبل از آنکه ستون اضافه شده باشد. طبق آن مقایسه، EF Core تشخیص می دهد که یک ستون اضافه شده است و migration مناسب را اضافه می کند.
حالا شما می توانید migration خود را مانند قبل اعمال کنید:
Update-Database
فقط یادتان باشد که این بار، EF Core تشخیص می دهد که دیتابیس از قبل وجود دارد. همچنین وقتی اولین migration ما اعمال شد، این مورد (وجود دیتابیس و ساختار مدل قبلی) در یک جدول migrations history ، در دیتابیس نگه داری می شود. این به EF Core اجازه می دهد که بصورت اتوماتیک فقط migration جدید را اعمال کند.