我正在进行理论上简单的迁移。对于我的up()方法:
DropIndex("dbo.tableA", "IX_index_1");
AddColumn("dbo.tableB", "column1", c => c.Int(nullable: false));
DropColumn("dbo.tableA", "column2");
但是,在运行迁移时,我在控制台中收到此错误:
Unable to update database to match the current model because there are pending changes and automatic migration is disabled
当我运行
Add-Migration
“快照”提供了相同的架构更改。 这是什么原因? 谢谢。
答案 0 :(得分:1)
如果两个人同时创建迁移并相互独立签入,则会发生这种情况。
因此,假设您有3个迁移A,B,C签入了源代码管理。两个人得到了它们,并创建了迁移D和E。D和E都具有包含直到C的更改的架构的快照。创建D的人签入,然后创建E的人得到最新的。 EF会认为该模型不同步,因为E中的快照不包括D。添加迁移时,它会计算AE中包括D在内的所有更改,并且发现没有新操作可做,因此迁移中没有任何内容。
快照在迁移下存储在resx文件中。如果您在xml编辑器中将其打开,则会在其中看到快照。
解决此问题的方法是保留空迁移,因为它不会造成任何危害,或者E的人可以删除并重新创建其迁移,以便其快照包含D的更改。
希望有帮助!
答案 1 :(得分:0)
我想补充一下我和我的团队最终选择的内容。
尽管我选择了MikeS的答案作为选择的答案,但我们发现的另一种解决方案是在分支开始相互干扰之前回滚到上一个稳定的迁移,删除较新的迁移,然后合并有问题的迁移。
Add-Migration命令自动获取所需的架构更改,然后我们添加了用于传输记录的逻辑。