無法更新數據庫以匹配目前模型,因為有待處理的更改
我在 Visual Studio 2013 環境中建構了一個項目,首先使用 EF 5 程式碼建構了 Db。很長一段時間以來,我的 API 都可以正常工作,但突然間我開始收到以下錯誤消息:
無法更新數據庫以匹配目前模型,因為存在待處理的更改並且自動遷移已禁用。將掛起的模型更改寫入基於程式碼的遷移或啟用自動遷移。將 DbMigrationsConfiguration.AutomaticMigrationsEnabled 設置為 true 以啟用自動遷移。
當我嘗試到達我的 API 的終點時。我嘗試添加新的遷移,然後更新數據庫,但仍然出現錯誤。然後我刪除整個數據庫並使用 EF 重新創建。我的 API 的端點開始正常工作,但後來我又開始在網頁上收到此錯誤。我在配置文件中將自動遷移設置為 true。我真的不知道為什麼會一遍又一遍地發生這種情況。這讓我真的很沮喪。這是錯誤的完整堆棧跟踪:
> > > > >
$$ AutomaticMigrationsDisabledException: Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. $$
System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) +579 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) +445
System.Data.Entity.Migrations。 <>c__DisplayClassc.b__b() +13
System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +422
System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +78
System.Data.Entity.Migrations .Infrastructure.MigratorBase.Update() +12 YourTimeSite.Global.ApplyDatabaseMigrations() 在 c:\Users\Ahmed\Desktop\YourTimeSite\YourTimeSite\Global.asax.cs:55
YourTimeSite.Global.Application_Start(Object sender, EventArgs e) 在 c:\Users\Ahmed\Desktop\YourTimeSite\YourTimeSite\Global.asax.cs:32 $$ HttpException (0x80004005): Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. $$
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9966013
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo$$ $$處理程序)+118
System.Web.HttpApplication.InitSpecial(HttpApplicationState 狀態,MethodInfo$$ $$處理程序,IntPtr appContext,HttpContext 上下文)+172
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext 上下文)+352
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)+296 $$ HttpException (0x80004005): Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. $$
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+9947380 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文)+101
我對此有很多麻煩,但對我來說,答案是排除中間數據庫遷移項目,這些項目改變了已經用這些更改創建的表。如果我對我在這裡所做的事情有更多了解,我想我會遵循上面關於 DbContext 設置的建議。
執行 update-database 產生了同樣的錯誤,但是:
- 添加一個空遷移(通過 PM),然後 update_database 工作
add-migration EmptyMigration然後執行
update-database此時遷移執行沒有錯誤。
- 也就是說,一些遷移需要從項目中排除(不了解 CodeFirst 項目是如何創建這些遷移的,因此它們是不需要的,因此可以“排除”)。
- 項目遷移包括更新 EntityFramework 已經應用的表結構的中間步驟(實體框架新手-我正在使用 udemy 中的 CodeFirst 範例-MVC5 課程)
- 最初是“無法為…創建顯式遷移”(VS2019)
- 然後“沒有未決的顯式遷移。解碼時發現無效數據。”
- 按照說明刪除 obj 文件夾,然後從 Nuget 清除記憶體,但沒有任何結果。
- 接下來,嘗試使用 SSMS 刪除並使用空數據庫重新創建數據庫(我正在執行 SQL Server 的開發人員版本,但 Express 將是相同的)。這部分可能需要也可能不需要。
- 提出該項目並註意到它是 Net Framework 4.5,因此更新到 4.7。同樣,不確定是否需要。範例項目是為 Community Edition 2013 建構的。
- 重啟項目(VS2019)
- 執行了上述兩個步驟,現在一切正常。
在您的數據庫初始化程序中,將其
AutomaticMigrations設置為true然後將其恢復為false,這將解決問題:internal class MyDatabaseInitializer : MigrateDatabaseToLatestVersion<MyDBContext, MyConfiguration>{ } internal sealed class MyConfiguration : DbMigrationsConfiguration<MyDBContext>{ public MyConfiguration(){ AutomaticMigrationsEnabled = true; } }