مشخصات مقاله
-
0
-
0.0
-
5276
-
0
-
0
آموزش مکانیزم Migration در Entity Framework Core
آموزش مکانیزم Migration در Entity Framework Core
مکانیزم Migration در Entity Framework Core در واقع راهی است برای sync کردن Database و مدل EF Core.
همانطور که در شکل بالا نشان داده ایم، EF Core API مدل EF Core model را از کلاس های دامین می سازد و EF Core migration شمای Database را براساس آن می سازد یا تغییر می دهد. هر زمان که در کلاس های دامین تغییری ایجاد کنید، باید migration انجام دهید تا Database آپدیت شود.
Migration ها در EF Core مجموعه ای دستور است که می توانید در NuGet Package Manager Console یا در dotnet CLI اجرا کنید.
جدول زیر لیست مهم ترین دستورات migration را در EF Core نشان می دهد:
می خواهیم این دستورات را با جزئیات بررسی کنیم:
افزودن یک Migration
در ابتدای شروع ساخت یک application، کلاس های دامین خود را می سازید. در این نقطه Databaseی وجود ندارد. اول باید یک migration بسازید.
در برنامه Visual Studio از مسیر Tools -> NuGet Package Manager -> Package Manager Console، کنسول Package Manager Console را باز کنید. دستور زیر را برای افزودن یک migration اجرا کنید:
PM> add-migration MyFirstMigration
اگر از dotnet CLI استفاده می کنید دستور زیر را اجرا کنید:
> dotnet ef migrations add MyFirstMigration
در دستورات بالا، MyFirstMigration نام یک migration است. این دستور سه فایل در پوشه ی migrations در پروژه ایجاد می کند:

< timestamp >_< Migration Name >.cs: فایل اصلی migration که حاوی عملیات های migration در متدهایUP()وDown()است. متد UP() شامل کدهایی برای ایجاد DB object ها و متد Down() شامل کدهایی برای حذف DB object هاست.< timestamp >_< Migration Name >.Designer.cs: فایل حاوی migrations metadata که EF Core از آن استفاده می کند.< contextclassname >ModelSnapshot.cs: یک snapshot از مدل فعلی که برای تشخیص تغییرات در migration بعدی استفاده می شود.
حال پس از ساخت یک migration snapshot، وقت آن رسیده که Database را ایجاد کنیم.
ایجاد یا تغییر Database
از دستور زیر برای ایجاد یا تغییر Database استفاده کنید:
//Package Manager Console PM> Update-Database
//CLI > dotnet ef database update
دستور Update براساس context و کلاس های دامین و migration snapshot یک Database می سازد. اگر این اولین migration باشد، جدولی به نام __EFMigrationsHistory نیز می سازد که حاوی نام migration و زمان اعمالشان روی Database است.
حذف یک Migration
می توانید آخرین Migration را اگر هنوز به Database اعمال نشده باشد، حذف کنید. از دستورهای زیر برای پاک کردن فایل های Migration و برگرداندن model snapshot به وضع قبلی استفاده کنید:
Package Manager Console PM> remove-migration
CLI > dotnet ef migrations remove
توجه کنید اگر Migration به Database اعمال شده باشد، دستور بالا exception زیر را ایجاد می کند:
The migration < migration name > has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration
برگرداندن یک migration
فرض کنید کلاس های دامین را تغییر داده ایم و یک migration جدید به نام MySecondMigration با اجرای دستور add-migration ساخته ایم و آن را با دستور Update روی Database اعمال کرده ایم. اما به هر دلیلی می خواهیم Database را به حالت قبل از اعمال migration برگردانیم. دراین صورت از دستور update-database < migration name> برای برگرداندن Database به migration snapshot مشخص شده قبلی استفاده کنید:
Package Manager Console PM> Update-database MyFirstMigration
CLI > dotnet ef database update MyFirstMigration.
دستور بالا Database را بر اساس migration با نام MyFirstMigration تغییر می دهد و همه تغییرات اعمال شده در MySecondMigration را حذف می کند. رکورد MySecondMigration در جدول __EFMigrationsHistory نیز حذف می شود.
این دستور فایل های migration مربوط به MySecondMigration را پاک نمی کند. از دستور remove برای حذف آن ها از پروژه تان استفاده کنید.
ساخت یک SQL Script
برای ساخت یک SQL Script از Database دستور زیر را اجرا کنید:
Package Manager Console PM> script-migration
CLI > dotnet ef migrations script
دستور بالا اسکریپتی برای همه ی migration ها ایجاد می کند. می توانید migration ها را با گزینه های -to و -from محدود کنید.
- در PMC با دستور Get-Help entityframework می توانید درمورد دستورها راهنمایی بگیرید.
- در dotnet CLI نیز از دستور dotnet ef –help برای راهنمایی گرفتن درمورد دستورها استفاده کنید.
برای استفاده از .NET CLI فایل .csproj را در پروژه تان ویرایش کنید و در زیر < ItemGroup > node کد زیر را اضافه کنید:
< DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
سپس CMD را باز کنید و به پوشه ی root پروژه تان بروید. حال می توانید دستورات dotnet CLI را اجرا کنید.