Nic*_*yle 14 database ef-migrations entity-framework-5
改变源控制分支,运行更新的数据库的回滚到先前的迁移之后,EF有时会显示文本"还原自动迁移",象下面这样:
Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
Run Code Online (Sandbox Code Playgroud)
实体框架如何确定迁移应该是自动的,它的作用有何不同?
以下是如何重现它,假设您已经设置了一个已经设置了代码优先迁移的项目:
这就是我认为正在发生的事情,如果我错了,请纠正我.
当您搭建迁移时,实体框架将在 __MigrationsHistory 中记录的最后一个模型与当前模型之间执行差异,并创建一个包含该差异的迁移类。您可以自由编辑该脚手架迁移的 Up 和 Down 方法。
自动迁移让您可以跳过脚手架。如果启用它们并且您调用 Update-Database,它将执行当前模型和 __MigrationsHistory 中记录的最后一个模型的差异,并使用“自动”迁移应用该差异。自动迁移仍然会在 __MigrationHistory 中获得记录,但不会将迁移类添加到您的项目中。diff 的步骤与 Up 方法中的脚手架相同,但您永远没有机会自定义它。
当您恢复这些自动迁移之一时,它会对其记录的模型和先前迁移的模型执行比较。这些步骤与脚手架 Down 方法中的步骤相同。
如果实体框架找不到迁移的迁移类,它会假定它是自动迁移。因此,如果您自定义了 Down 方法,则在恢复时不会应用这些自定义设置。
希望这能让事情变得更清楚一些。