我已经进入了一个奇怪的土拨鼠日场景,其中包含了我的MVC应用程序 除非我在每次调试应用程序时都应用我的解决方法(本问题的后面部分),否则我会出现此错误:
支持' UsersContext'自从以来情境发生了变化 数据库已创建。考虑使用Code First Migrations进行更新 数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
我没有更改模型。
我的解决方法工作流程是:
注意:
这非常令人沮丧,我将如何永久解决这个问题?
注意:自动迁移不适合我的方案。
答案 0 :(得分:1)
嗯,如果不了解更多细节,几乎不可能理解错误。所以我所能做的就是给你一些你可以尝试的线索。
停止并重新启动应用程序不应导致数据库过时。是仅在调试时?您是否尝试过运行应用程序而无需调试?然后回收应用程序池并再次运行该应用程序。
你有任何奇怪的后期构建步骤,将覆盖你的" bin"文件夹?
您的应用是否正在执行更改数据库架构的操作,从而在您下次启动时使其无效?运行SQL事件探查器以检查应用程序启动时数据库发生的情况。
迁移回您的架构的第一个版本,然后再返回(首先备份您的数据库):
update-database -TargetMigration:0 -verbose
然后
update-database -verbose
暂时将大部分应用注释掉,以试图找出原因。
使用EF以相同方式配置创建一个全新的应用程序,复制连接字符串并查看是否发生了这种情况。如果没有,那么肯定会有不同的东西。如果是,请告诉我们您的EF设置。
希望这里有些东西可以给你一个至少一个想法。祝你好运!
答案 1 :(得分:0)
启用迁移会设置整个迁移系统。但要启用自动迁移,您必须包含 - EnableAutomaticMigrations ,只需添加行
AutomaticMigrationsEnabled = true;
到新生成的Configurations.cs文件中。
与数据库初始化程序结合使用,可以更加简化开发周转,因为每次进行更改时都不必再键入add-migration和update-database。这将自动发生。但是,这还不够,如果你想要删除列,你还必须执行第3步,支持自动数据丢失。
当您准备发布需要严格版本控制的软件(内部或外部)并在现场升级数据库时,您应该删除自动迁移并添加手动迁移点。
答案 2 :(得分:0)
更新到EF6时会发生这种情况,这会对_MigrationHistory
表(https://msdn.microsoft.com/en-us/data/jj591621)进行架构更改
EF6版本有一个新列ContextKey
,因此迁移可能会尝试添加该列。
我猜测你是否支持它只会做出这些改变 - 或者很久以前你曾经改变过的那些东西并没有被提起来#39;但由于某种原因。
或如果你现在不想处理它,你可以disable migrations temporarily。
System.Data.Entity.Database.SetInitializer<UsersContext>(null);