我有一个在Visual Studio 2013环境中构建的项目,其中Db首先使用EF 5代码构建。
我的API正常运行了很长时间,但突然之间我开始收到以下错误消息:
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.
当我尝试达到API的终点时。我尝试添加新的迁移,然后更新数据库,但仍然收到错误。然后,删除整个数据库,并使用EF重新创建。我的API的端点开始正常工作,但随后我又开始在网页上收到此错误。我在配置文件中将自动迁移设置为true。我真的不知道为什么这种情况一遍又一遍地发生。这让我真的很沮丧。
这是错误的完整堆栈跟踪:
[AutomaticMigrationsDisabledException:无法将数据库更新为
匹配当前模型,因为有待处理的更改,并且
自动迁移已禁用。编写待定模型
更改为基于代码的迁移或启用自动迁移。放
DbMigrationsConfiguration.AutomaticMigrationsEnabled为true以启用
自动迁移。]
System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1
endingMigrations,字符串targetMigrationId,字符串lastMigrationId)
+579 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串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(字符串
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):无法更新数据库以匹配
当前模型,因为有待更改和自动
迁移已禁用。要么将待处理的模型更改写到
基于代码的迁移或启用自动迁移。放
DbMigrationsConfiguration.AutomaticMigrationsEnabled为true以启用
自动迁移。]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext
上下文,HttpApplication应用)+9966013
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr
appContext,HttpContext上下文,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):无法更新数据库以匹配
当前模型,因为有待更改和自动
迁移已禁用。要么将待处理的模型更改写到
基于代码的迁移或启用自动迁移。放
DbMigrationsConfiguration.AutomaticMigrationsEnabled为true以启用
自动迁移。]
System.Web.HttpRuntime.FirstRequestInit(HttpContext上下文)+9947380
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext上下文)
+101
最佳答案
此处并没有足够的信息来诊断问题的根本原因,但通常,只有在数据库与实体类以某种方式不同步时,您才会得到该错误。如果您确实认为不是,则可以通过从生产数据库中删除_MigrationHistory
表来禁用此异常。届时,EF将把该数据库视为现有数据库,并且不再提示您迁移它。取而代之的是,只有在发现意外的列/缺少列,或者由于架构不同步而导致的其他SQL错误时,您才会获得异常。在某些方面,这更好,就像实际上有什么问题一样,您将更好地了解即将发生的事情,而不是被广泛告知需要迁移。
但是,删除迁移历史记录表意味着,如果您确实对实体类进行了更改,则您将有责任使其保持同步。通常,这不是问题。无论如何,对生产数据库运行迁移是一个糟糕的主意,因此,这实际上迫使您在必要时显式更新架构,希望使用适当的变更管理策略。
关于asp.net-mvc - 由于存在未决的更改,因此无法更新数据库以匹配当前模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956889/