2014-09-04 35 views
1

我遇到EF6代码优先迁移问题。无法在本地运行主服务器,因为我的EF代码优先迁移不同步

当我在一个较低的子分支中,我正在为新事物做出我的开发变更外,我在该分支中进行了迁移,并且我的数据库进行了这些更改。

当我切换到我的主分支(我不想合并),我尝试在本地运行它时,我的迁移存在于我的数据库中,但不在该代码分支中。

我试图做一个bug修复从主分支出去的生产和不想运行任何新的迁移作业,但它告诉我:

模型靠山“DummyDBContext”上下文有自 数据库创建以来已更改。

我该如何解决这个问题?

回答

4

这里真的有两个问题。

  1. 存储在数据库(在_MigrationHistory表)的迁移历史是不同步,您已经在主分支得到了迁移。这是导致InvalidOperationException被抛出的原因。
  2. 实际的数据库模式现在与EF基于主分支中存在的迁移理解您的模式的方式不同步。根据您当前的代码(在master中),模式应该看起来像您切换到subBranch并进行更改之前所做的。

最简单的方法就是在切换回主机之前回滚'subBranch'迁移(通过调用Update-Database -TargetMigration [NameOfPreviousMigration])。不足之处在于,无论何时切换回subBranch,您都必须重新运行迁移。

否则,解决这个问题的方法是将意味着:

  1. 手动从_MigrationHistory表中删除迁移的历史。
  2. 通过将DbInitializer设置为DropCreate(这将删除数据库中的所有数据,请注意此数据库)或手动撤消对模式所做的任何更改,从而回滚对数据库模式所做的任何更改迁移。 如果你确实走这条路线,那么当你切换回subBranch时,你将需要重新从头开始迁移。

好运;)