Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 什么是;“恢复自动迁移”;什么意思?_Database_Entity Framework 5_Entity Framework Migrations - Fatal编程技术网

Database 什么是;“恢复自动迁移”;什么意思?

Database 什么是;“恢复自动迁移”;什么意思?,database,entity-framework-5,entity-framework-migrations,Database,Entity Framework 5,Entity Framework Migrations,在源代码管理中更改分支后,运行更新数据库以回滚到以前的迁移,EF有时会显示文本“还原自动迁移”,如下所示: Reverting automatic migration: 201305171619008_DescriptiveNameForMigration. Reverting code-based migration: 201305162023299_Init. 实体框架是如何确定迁移应该是自动的,它有什么不同之处 假设您有一个已经设置了代码优先迁移的项目,下面介绍了如何复制它: 切换到源代

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

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration.
Reverting code-based migration: 201305162023299_Init.
实体框架是如何确定迁移应该是自动的,它有什么不同之处

假设您有一个已经设置了代码优先迁移的项目,下面介绍了如何复制它:

  • 切换到源代码管理中的新分支
  • 对模型、贴图器进行更改,然后添加移植
  • 更新数据库
  • 切换回默认分支
  • 更新数据库-TargetMigration:0-强制
  • 请参见更新数据库命令的结果中的“恢复自动迁移”
  • 这就是我认为正在发生的事情,如果我错了,请纠正我

    • Update Database枚举迁移历史记录中的迁移
    • 它在项目中找到相应的迁移文件并调用Down()方法
    • 如果相应的迁移文件不存在,那么它将根据_MigrationHistory中的快照对如何回滚迁移进行最佳猜测

    构建迁移时,Entity Framework将在_uMigrationHistory中记录的最后一个模型和当前模型之间执行差异,并创建包含该差异的迁移类。您可以自由编辑构建迁移的向上和向下方法

    自动迁移允许您跳过脚手架。如果它们被启用,并且您调用Update Database,它将对您的当前模型和_MigartionsHistory中记录的最后一个模型执行差异,并使用“自动”迁移应用该差异。自动迁移仍会在_MigrationHistory中获得一条记录,但不会向项目中添加任何迁移类。diff的步骤与Up方法中构建的步骤相同,但是您从来没有机会对其进行定制

    当您还原其中一个自动迁移时,它将对所记录的模型和上一次迁移的模型执行差异。这些步骤与“脚手架向下”方法中的步骤相同

    如果EntityFramework找不到迁移的migrations类,它将假定这是一个自动迁移。因此,如果自定义了Down方法,则在还原时不会应用这些自定义设置


    希望这能让事情变得更清楚。

    我认为您描述的情况发生得很好。代码中的down方法是否恢复到原来的状态?然后,它有一个路径来获取MigrationHistory表中的版本。你不这么认为吗?是的,如果存在用于迁移的代码文件,那么它将使用Down()方法。我想知道当被恢复的迁移不存在代码文件时,“恢复自动迁移”是如何工作的。(这可能适用于一个新的SO问题。)您也认为“恢复自动迁移”意味着它会动态生成Down()方法?最好知道,当自动迁移检测到没有相应迁移文件的更改时,会记录自动迁移。到目前为止,我只注意到自动消息和基于代码的消息混合在一起,而不支持更改。谢谢您提供的详细信息。:)