“还原自动迁移”是什么意思?

时间:2013-05-17 16:53:15

标签: database entity-framework-5 ef-migrations

在源代码管理中更改分支后,运行Update-Database以回滚到先前的迁移,EF有时会显示“还原自动迁移”文本,如下所示:

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.

实体框架如何确定迁移应该是自动的,它的作用有何不同?

以下是如何重现它,假设您的项目已经设置了代码优先迁移:

  1. 切换到源代码管理中的新分支
  2. 对模型,地图制作工具进行更改并添加迁移
  3. 更新的数据库的
  4. 切换回默认分支
  5. Update-Database -TargetMigration:0 -Force
  6. 请参阅Update-Database命令
  7. 的结果中的“恢复自动迁移”

    这就是我认为正在发生的事情,如果我错了,请纠正我。

    • Update-Database枚举__MigrationHistory
    • 中的迁移
    • 它在项目中找到相应的迁移文件并调用Down()方法
    • 如果相应的迁移文件不存在,那么它会根据__MigrationHistory中的快照执行有关如何回滚迁移的最佳猜测

1 个答案:

答案 0 :(得分:3)

当您进行迁移时,Entity Framework将在__MigrationsHistory中记录的最后一个模型与当前模型之间执行差异,并创建包含该差异的迁移类。您可以自由编辑该支架迁移的Up和Down方法。

自动迁移可让您跳过脚手架。如果它们已启用且您调用Update-Database,它将执行当前模型的差异以及__MigartionsHistory中记录的最后一个模型,并使用“自动”迁移应用该差异。自动迁移仍会在__MigrationHistory中获取记录,但不会向项目中添加迁移类。 diff的步骤与Up方法中的脚手架相同,但是您从未有机会对其进行自定义。

当您还原其中一个自动迁移时,它会执行已记录的模型的差异以及先前迁移的模型。这些步骤与支架式Down方法相同。

如果Entity Framework无法找到迁移的迁移类,则会假定它是自动迁移。因此,如果您自定义了Down方法,则在还原时不会应用这些自定义项。

希望这会让事情变得更加清晰。