即使在重置所有迁移后,实体框架迁移“上下文已更改”错误仍然存​​在

时间:2014-11-07 14:54:28

标签: entity-framework asp.net-mvc-5 ef-migrations

我有两个项目的解决方案,主要有用户类(默认为MVC5),另一个有业务类。

在我的代码中进行了一些更改后,我遇到了错误:

  

自创建数据库以来,支持'EfDbContext'上下文的模型已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

我已经执行了添加新迁移和更新数据库的命令。错误仍在继续。

在此之后,我尝试了许多方法来解决问题,包括以下解决方案:

https://stackoverflow.com/a/22451879/2394172

https://stackoverflow.com/a/11679386/2394172

但我仍然有这个错误:

enter image description here

PS:我已经删除了我的数据库并重新创建它,问题仍然存在。

我无法弄清楚为什么这个错误仍在发生。当我执行命令Add-Migration时,创建的文件的功能为空白。

更新(2014年11月12日):

我制作了一段视频,展示了我正在尝试的所有流程,证明我使用的是与迁移更新相同的数据库。

http://youtu.be/hNVG10NynZU

顺便说一句,我注意到我可以在数据库中插入数据,如视频中所示,但在此之后,会发生错误。

3 个答案:

答案 0 :(得分:1)

如果您不关心现有数据,以下内容肯定会有效:

  1. 丢掉数据库
  2. 丢弃所有迁移文件
  3. 运行add-migration
  4. 运行update-database
  5. 这有点像压路机,但是如果你不想找出实际上是什么问题就会让你摆脱困境。

答案 1 :(得分:1)

您的代码在内部调用CreateDatabaseIfNotExists时失败... InitializeDatabase - 由于某种原因,您的应用程序认为数据库不存在并且正在尝试从您的模型代码创建它。您正在为ASPNet Identity表和您的专有表使用相同的数据库;当您第一次尝试从专有表(Cms)访问数据时,您将获得例外。

也许为ASPNet表使用不同的数据库名称,因此它们不在CMS数据库中。

,因为您在程序包管理器控制台中使用迁移来创建/更新架构,所以不要使用CodeFirst Database Initializer功能。在EfDbContext的构造函数中,将null传递给Database.SetInitializer<>()方法,以防止在首次访问时尝试初始化数据库。请参阅此链接以获取代码示例:

http://www.entityframeworktutorial.net/code-first/turn-off-database-initialization-in-code-first.aspx

答案 2 :(得分:1)

不确定但是 启用迁移或添加迁移时,请尝试使用-projectName。 我记得在解决方案中运行多个项目的迁移时遇到了一些问题。 我记得他们在某个地方读过他们使用Set as StartUp项目或者那样的想法。