我在 EF6 代码优先迁移时遇到问题。
当我在较低的子分支中为新事物进行开发更改时,我在该分支中进行了迁移,并且我的数据库也进行了这些更改。
当我切换到主分支(我不想合并)并尝试在本地运行它时,我的迁移存在于我的数据库中,但不存在于该代码分支中。
我正在尝试修复错误以从主分支进入生产环境,并且不想运行任何新的迁移,但它告诉我:
The model backing the 'DummyDBContext' context has changed since the database was created.
我该如何解决这个问题?
最佳答案
你这里确实有两个问题。
- 存储在数据库中(在 _MigrationHistory 表中)的迁移历史记录与 master 分支上的迁移不同步。这就是导致抛出
InvalidOperationException
的原因。 - 实际的数据库架构现在与 EF 基于 master 分支中存在的迁移来理解架构的方式不同步。根据您当前的代码(在 master 中),架构应该看起来确实像您切换到 subBranch 并进行更改之前的样子。
最简单的方法是在切换回主分支之前回滚“subBranch”迁移(通过调用 Update-Database -TargetMigration [NameOfPreviousMigration]
)。缺点是每次切换回子分支时都必须重新运行迁移。
否则,解决这个问题的方法将需要:
- 从 _MigrationHistory 表中手动删除迁移历史记录。
- 通过将
DbInitializer
设置为DropCreate
来回滚对数据库架构所做的任何更改(这将删除数据库中的所有数据,因此请注意/这一项)或手动撤消迁移对架构所做的任何更改。 如果您确实走这条路线,那么当您以任何一种方式切换回 subBranch 时,都需要从头开始重新运行迁移。
祝你好运;)
关于c# - 无法在本地运行 master,因为我的 EF Code First 迁移不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675829/