无法在本地运行master,因为我的EF代码优先迁移不同步

本文关键字:代码 EF 迁移 同步 我的 因为 运行 master | 更新日期: 2023-09-27 18:20:46

我遇到了EF6代码优先迁移的问题。

当我在一个较低的分支中进行开发更改以推出新产品时,我会在该分支中进行迁移,而我的数据库也会进行这些更改。

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

我正试图修复一个bug,从主分支进入生产,不想运行任何新的迁移,但它告诉我:

自数据库已创建。

我该怎么绕过这个?

无法在本地运行master,因为我的EF代码优先迁移不同步

这里确实有两个问题。

  1. 存储在数据库中的迁移历史记录(在_MigrationHistory表中)与主分支上的迁移不同步。这就是导致抛出InvalidOperationException的原因
  2. 实际的数据库模式现在与EF基于master分支中存在的迁移理解模式的方式不同步。根据您当前的代码(在master中),模式应该与您切换到subBranch并进行更改之前的模式类似

最简单的方法是在切换回master之前回滚"subBranch"迁移(通过调用Update-Database -TargetMigration [NameOfPreviousMigration])。不利的一面是,每当您切换回subBranch时,都必须重新运行迁移。

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

  1. 从_MigrationHistory表中手动删除迁移历史记录
  2. 通过将DbInitializer设置为DropCreate来回滚对数据库架构所做的任何更改(这将删除数据库中的所有数据,因此请注意这一点),或者手动撤消迁移对架构所作的任何更改。如果你真的走这条路,当你切换回subBranch时,你需要从头开始重新运行迁移

好运;)