迁移已经附加时,实体框架要求更新数据库

时间:2016-02-11 17:47:18

标签: c# entity-framework ef-code-first ef-migrations

ASP.NET上发布的ASP.NET WebAPI应用程序,首先是实体框架代码。

在应用程序启动(第一张图片)上执行迁移后发布后,我无法添加新的迁移并使用数据库上下文(“自创建数据库以来,”支持'DatabaseContext'上下文的模型已更改“异常)。添加新的迁移EF中断时出错:

  

由于以下显式迁移未决,因此无法生成显式迁移:[迁移名称]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

看起来EF看不到__MigrationHistory表的迁移。我检查了这个表,最后一次迁移存在。

在web.config中只有一个连接字符串。

如果它很重要,DatabaseContextWithoutCache继承DatabaseContext(它们有不同的DbConfigurationType)。

将null初始化程序Database.SetInitializer<DatabaseContext>(null);添加到数据库上下文后,它可以工作,但我仍然无法添加任何迁移。

为什么Entity Framework没有看到迁移已经附加到数据库? update-database因为db中已有表和列而中断。

修改

在我的迁移列表中2迁移。我回滚到init(第一次)迁移并删除第二次。然后添加迁移(现在它包含第二次和新更改的更改)并运行update-database。有用。

但EF忽略了db是最新的,并且“自创建数据库以来,”支持'DatabaseContext'上下文的模型已经改变了“异常。

我不理解

first pic

2 个答案:

答案 0 :(得分:0)

我最近在VS 2013下遇到过这个问题。如果在软件包管理器控制台中运行命令add-migration {name}(可选择添加-startupprojectname {MyProjectName}),EF应该为您生成一个新的迁移文件。如果该迁移文件包含任何内容,那么它认为您不应该在哪里,然后应该运行update-database新迁移。

不幸的是,似乎有可能陷入这种环境(它发生在我身上)并且有很多SO Q&amp; As关注这一点。非常幸运的解决它。

答案 1 :(得分:0)

正如错误所示,存在针对数据库的迁移。

使用包管理器中的以下命令(用您自己的值替换值)

update-database -projectname yourprojectname -connectionstring "yourconnectionstring"

然后,创建新的迁移....

add-migration yournewmigrationname -projectname yourprojectname -connectionstring "yourconnectionstring"

最后,运行新创建的迁移

update-database -projectname yourprojectname -connectionstring "yourconnectionstring"