asp.net-mvc - 由于存在未决的更改,因此无法更新数据库以匹配当前模型

标签 asp.net-mvc entity-framework ef-code-first

我有一个在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/

相关文章:

asp.net-mvc - 开源存储库中的 Web.config

c# - 如何访问当前开发服务器中 Controller 中的Images文件夹?

c# - Entity Framework 代码优先 : NULL values inserted in database

c# - 映射到现有的数据库表

asp.net-mvc - ASP.NET MVC Core 2.0 - 删除 UserKestrel() 以部署到 Azure 网站?

jquery - 使用 SignalR 检测 'server offline'

c# - 了解异常 "An entity object cannot be referenced by multiple instances of IEntityChangeTracker."

c# - MVC 5 - 无法从用法推断方法 "..."的类型参数。尝试显式指定类型参数

c# - 我可以使用反射从 EF SqlQuery 获取值名称和值吗

c# - 如何首先在代码中或使用 ColumnBuilder 将 ROWGUIDCOL 属性指定为 Guid 类型的列?