اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
فعال سازی 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 استفاده کنید.