我在 Entity Framework 版本 5 中遇到代码优先迁移的奇怪问题。有时 Update-Database
由于未决更改而失败,但 Add-Migration
命令仅生成迁移上次迁移中已包含数据库更改,并且数据库是最新的。因此,我希望新迁移是空的。
Add-Migration
如何检测哪些更改到期?它似乎没有使用数据库作为来源。
最佳答案
数据库模型的快照与每次迁移一起保存在 .resx 文件中。添加新迁移时,EF 会将当前数据库模型(从模型类和 DbModelBuilder 的设置生成)与上次迁移进行比较,并确定它们之间的变化。
如果您的迁移不同步,则可能会出现您描述的问题。如果两个开发人员进行了两次独立的迁移,并且这些迁移稍后被合并回默认分支,我们就会遇到这种情况。
例子:
Developer 1
Migration AddColumnA
Developer 2
Migration AddColumnB
Merged version
Migration AddColumnA - database snapshot includes columnA
Migration AddColumnB - database snapshot includes columnB but not columnA
如果您添加另一个迁移,更改是根据迁移 AddColumnB 确定的,它不包含有关 columnA 的信息。此问题的解决方法是生成虚拟迁移(使用空的 Up 和 Down 方法),以便在上次迁移中获得正确的数据库模型快照。
Merged version
Migration AddColumnA - database snapshot includes columnA
Migration AddColumnB - database snapshot includes columnB but not columnA
Migration Dummy - database snapshot with columnA and columnB
关于c# - 为什么 Add-Migration 有时会创建重复的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136066/