在源代码控制中更改分支后,运行 Update-Database 回滚到之前的迁移,EF 有时会显示文本“Reverting automatic migration”,如下所示:
Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
Entity Framework 如何确定迁移应该是自动的,它有什么不同之处?
这里是重现它的方法,假设你有一个已经设置了代码优先迁移的项目:
- 切换到源代码管理中的新分支
- 更改模型、映射器并添加迁移
- 更新数据库
- 切换回默认分支
- 更新数据库-TargetMigration:0 -Force
- 在 Update-Database 命令的结果中查看“还原自动迁移”
这就是我的想法,如果我错了请纠正我。
- Update-Database 枚举 __MigrationHistory 中的迁移
- 在项目中找到对应的迁移文件,调用Down()方法
- 如果相应的迁移文件不存在,则它会根据 __MigrationHistory 中的快照执行关于如何回滚迁移的最佳猜测
最佳答案
当您构建迁移时, Entity Framework 将在 __MigrationsHistory 中记录的最后一个模型与当前模型之间执行差异,并创建包含该差异的迁移类。您可以自由编辑该脚手架迁移的 Up 和 Down 方法。
自动迁移让您跳过脚手架。如果启用它们并且您调用更新数据库,它将执行当前模型和 __MigartionsHistory 中记录的最后一个模型的差异,并使用“自动”迁移应用该差异。自动迁移仍然在__MigrationHistory 中有记录,但是不会有迁移类添加到你的项目中。 diff 的步骤与 Up 方法中的脚手架相同,但您永远没有机会对其进行自定义。
当您恢复这些自动迁移之一时,它会对其记录的模型和先前迁移的模型执行差异。这些步骤与脚手架 Down 方法中的步骤相同。
如果 Entity Framework 找不到迁移的迁移类,它会假定这是一个自动迁移。因此,如果您自定义了 Down 方法,则在还原时不会应用任何这些自定义。
希望这能让事情变得更清楚一些。
关于database - "Reverting automatic migration"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614272/