在源代码管理中更改分支后,运行Update-Database以回滚到先前的迁移,EF有时会显示“还原自动迁移”文本,如下所示:
Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
实体框架如何确定迁移应该是自动的,它的作用有何不同?
以下是如何重现它,假设您的项目已经设置了代码优先迁移:
这就是我认为正在发生的事情,如果我错了,请纠正我。
答案 0 :(得分:3)
当您进行迁移时,Entity Framework将在__MigrationsHistory中记录的最后一个模型与当前模型之间执行差异,并创建包含该差异的迁移类。您可以自由编辑该支架迁移的Up和Down方法。
自动迁移可让您跳过脚手架。如果它们已启用且您调用Update-Database,它将执行当前模型的差异以及__MigartionsHistory中记录的最后一个模型,并使用“自动”迁移应用该差异。自动迁移仍会在__MigrationHistory中获取记录,但不会向项目中添加迁移类。 diff的步骤与Up方法中的脚手架相同,但是您从未有机会对其进行自定义。
当您还原其中一个自动迁移时,它会执行已记录的模型的差异以及先前迁移的模型。这些步骤与支架式Down方法相同。
如果Entity Framework无法找到迁移的迁移类,则会假定它是自动迁移。因此,如果您自定义了Down方法,则在还原时不会应用这些自定义项。
希望这会让事情变得更加清晰。