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

rle*_*ler 2 c# entity-framework

我在 EF6 代码优先迁移时遇到问题。

当我处于较低的子分支时,我正在对新事物进行开发更改,我在该分支中进行了迁移,并且我的数据库也进行了这些更改。

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

我正在尝试修复错误以从主分支进入生产环境,并且不想运行任何新的迁移,但它告诉我:

自数据库创建以来,支持“DummyDBContext”上下文的模型已发生更改。

我该如何解决这个问题?

sha*_*yac 5

你这里确实有两个问题。

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

最简单的方法是在切换回 master 之前回滚“subBranch”迁移(通过调用Update-Database -TargetMigration [NameOfPreviousMigration])。缺点是每次切换回子分支时都必须重新运行迁移。

否则,解决这个问题的方法将需要:

  1. 从 _MigrationHistory 表中手动删除迁移历史记录。
  2. 通过设置 to DbInitializerDropCreate这将删除数据库中的所有数据,因此请注意这一点)或手动撤消迁移对架构所做的任何更改,回滚对数据库架构所做的任何更改。如果您确实选择了这条路线,那么当您以任何一种方式切换回 subBranch 时,您都需要从头开始重新运行迁移。

祝你好运 ;)