无法在本地运行master,因为我的EF Code First Migrations不同步

时间:2014-09-04 22:18:01

标签: c# entity-framework

我遇到了EF6代码首次迁移的问题。

当我在一个较低的子分支中,我正在更改新的东西时,我会在该分支中进行迁移,我的数据库会进行这些更改。

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

我正在尝试修复bug以从主分支转到生产,并且不想运行任何新的迁移,但它告诉我:

  

支持'DummyDBContext'上下文的模型自此以来已发生变化   数据库已创建。

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:4)

你在这里遇到了两个问题。

  1. 存储在数据库中的迁移历史记录(在_MigrationHistory表中)与您在主分支上获得的迁移不同步。这就是导致InvalidOperationException被抛出的原因。
  2. 实际的数据库架构现在与EF根据主分支中存在的迁移了解您的架构的方式不同步。根据您当前的代码(在master中),架构应该像切换到subBranch并进行更改之前的样子一样。
  3. 最简单的方法是回滚' subBranch'切换回master之前的迁移(通过调用Update-Database -TargetMigration [NameOfPreviousMigration])。缺点是,无论何时切换回subBranch,您都必须重新运行迁移。

    否则,解决这个问题的方法将包括:

    1. 从_MigrationHistory表中手动删除迁移历史记录。
    2. 通过将DbInitializer设置为DropCreate(将删除数据库中的所有数据,因此请注意这个数据)或手动设置,回滚对数据库模式所做的任何更改撤消迁移对架构所做的任何更改。 如果你采用这种方式,当你以任何一种方式切换回subBranch时,你将需要从头开始重新运行迁移。
    3. 祝你好运;)