فعال سازی Migration (+و +) بسیار ساده است؛ ولی یکی از مشکلات رایجیکه در زمان اجرای دستور Add-Migration در Entity Framework وجود دارد:
اولین قدم در برخورد با این مسئله، بررسی جدول MigrationHistory__ در پایگاه داده مورد نظر است تا لیستی از سوابق بهروزرسانیهای پایگاه داده را با استفاده کد زیر مشاهده کرد:
MigrationIdکلید مربوط به این query است و مقدار آن برابر است با نامی است که در زمان استفادهی از Add-Migration وارد شده است.
زمانی این مشکل به وجود میآید (حالت اول) که بعد از اجرای Add-Migration دستور Update-Database را فراخوانی کرده باشید و سپس Add-Migration را دوباره فراخوانی کنید و یا (حالت دوم) وقتی که namespaceکلاس Configuration را تغییر داده باشید؛ چرا که Entity Framework برای انجام تغییرات Migration از دو کلید MigrationIdو ContextKeyاستفاده میکند که مقدار ContextKey برابر namespace فایل Configuration است.
برای حالت اول که مشخص است با اجرای دستور Update-Database کار بهروزرسانی پایگاه داده انجام میشود و بعد میتوانید Add-Migration را فراخوانی کنید.
در حالت دوم باید با استفاده از SQL تمامی رکوردهای موجود در جدول MigrationHistory__ را ویرایش کرد؛ با استفاده از کد زیر:
در پایان برای اطمینان از لیست Migrationهای اعمال شده بر روی پایگاه داده مورد نظر، میتوانید از دستور Get-Migrations استفاده کنید.
Unable to generate an explicit migration because the following explicit migrations are pending: ...
اولین قدم در برخورد با این مسئله، بررسی جدول MigrationHistory__ در پایگاه داده مورد نظر است تا لیستی از سوابق بهروزرسانیهای پایگاه داده را با استفاده کد زیر مشاهده کرد:
SELECT [MigrationId] ,[ContextKey] ,[Model] ,[ProductVersion] FROM [dbo].[__MigrationHistory]
زمانی این مشکل به وجود میآید (حالت اول) که بعد از اجرای Add-Migration دستور Update-Database را فراخوانی کرده باشید و سپس Add-Migration را دوباره فراخوانی کنید و یا (حالت دوم) وقتی که namespaceکلاس Configuration را تغییر داده باشید؛ چرا که Entity Framework برای انجام تغییرات Migration از دو کلید MigrationIdو ContextKeyاستفاده میکند که مقدار ContextKey برابر namespace فایل Configuration است.
برای حالت اول که مشخص است با اجرای دستور Update-Database کار بهروزرسانی پایگاه داده انجام میشود و بعد میتوانید Add-Migration را فراخوانی کنید.
در حالت دوم باید با استفاده از SQL تمامی رکوردهای موجود در جدول MigrationHistory__ را ویرایش کرد؛ با استفاده از کد زیر:
UPDATE [dbo].[__MigrationHistory] SET [ContextKey] = 'VMT.Data.Migrations.Configuration' WHERE [ContextKey] = 'MyProject.Migrations.Configuration';
در پایان برای اطمینان از لیست Migrationهای اعمال شده بر روی پایگاه داده مورد نظر، میتوانید از دستور Get-Migrations استفاده کنید.