database - "Reverting automatic migration"是什么意思?

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

在源代码控制中更改分支后,运行 Update-Database 回滚到之前的迁移,EF 有时会显示文本“Reverting automatic migration”,如下所示:

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

Entity Framework 如何确定迁移应该是自动的,它有什么不同之处?

这里是重现它的方法,假设你有一个已经设置了代码优先迁移的项目:

  1. 切换到源代码管理中的新分支
  2. 更改模型、映射器并添加迁移
  3. 更新数据库
  4. 切换回默认分支
  5. 更新数据库-TargetMigration:0 -Force
  6. 在 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/

相关文章:

php - 在PHP/MySQL中插入值时出现外键约束错误

php - Mysql:在组合列中搜索

c# - Entity Framework 中是否有一个函数可以转换为 SQL 中的 RANK() 函数?

entity-framework-5 - EF 5 中的多个结果集

c# - 在程序集 '' 中发现了不止一种迁移配置类型。指定要使用的名称。添加迁移

python - 如何保护我们的 mongodb 数据库?不改变我们的 pymongo 'MongoClient()' 代码是否可行?

php - 如何自动解析 RSS 提要以存储在 MySQL 数据库中?

entity-framework - 当我尝试在 EF 4.3.1 中启用迁移时引发异常

c# - ASP.NET MVC3 请求的名称有效,但未找到请求类型的数据

entity-framework-4 - 是否可以更改 EF Migrations "Migrations"文件夹的位置?