36

我在 Entity Framework 版本 5 中遇到了一个奇怪的代码优先迁移问题。有时Update-Database由于挂起的更改而失败,但Add-Migration命令只生成上次迁移中已经包含的数据库更改的迁移,并且数据库是最新的。因此,我希望新的迁移是空的。

如何Add-Migration检测应发生的更改?它似乎没有使用数据库作为来源。

4

1 回答 1

61

数据库模型的快照与每次迁移一起保存在 .resx 文件中。添加新迁移时,EF 会将当前数据库模型(由模型类和 DbModelBuilder 中的设置生成)与上次迁移进行比较,并确定它们之间的更改。

如果您的迁移不同步,则可能会出现您描述的问题。如果两个开发人员进行了两次独立的迁移,并且这些迁移后来合并回默认分支,我们就会遇到这种情况。

例子:

开发商 1

迁移 AddColumnA

开发商 2

迁移 AddColumnB

合并版

迁移 AddColumnA - 数据库快照包括 columnA

迁移 AddColumnB - 数据库快照包括 columnB 但不包括 columnA

如果您添加另一个迁移,则根据迁移 AddColumnB 确定更改,该迁移不包含有关 columnA 的信息。此问题的解决方法是生成虚拟迁移(使用空的 Up 和 Down 方法),只是为了在上次迁移中获得正确的数据库模型快照。

合并版

迁移 AddColumnA - 数据库快照包括 columnA

迁移 AddColumnB - 数据库快照包括 columnB 但不包括 columnA

Migration Dummy - 具有 columnA 和 columnB 的数据库快照

于 2013-10-03T11:28:35.153 回答