EF 4.3迁移 - 如何生成降级脚本?

15

我有一个问题,在网络上找不到答案。

我正在使用CodeFirst EF 4.3.1迁移与MsSQL。

我已添加了几个迁移,现在我想生成两个迁移之间的升级/降级脚本。

对于升级,我运行以下命令,成功地生成了升级脚本:

PM> Update-Database -Script -SourceMigration:"201205161144187_AddPostAbstract" -TargetMigration:"201205161203310_BlogLimitsAndTableRename"

然而,对于降级,我运行了下面的命令,但是失败并显示以下错误:

PM> Update-Database -Script -SourceMigration:"201205161203310_BlogLimitsAndTableRename" -TargetMigration:"201205161144187_AddPostAbstract"
Scripting the downgrade between two specified migrations is not supported.

有什么想法可以生成一个降级脚本吗?

谢谢。

1个回答

16

看起来迁移API认为您只想从“最后版本”进行降级。

如果BlogLimitsAndTableRename是您最近的迁移(最后一个应用),您可以简单地运行:

Update-Database -Script -TargetMigration:"201205161144187_AddPostAbstract"

如果这不是你最后一次迁移,你需要先将开发数据库还原到该迁移:

Update-Database -TargetMigration:"201205161203310_BlogLimitsAndTableRename"

现在,您应该能够使用第一个命令来获取脚本。


这有点说得通。想象一下,你的数据库处于状态5,然后你尝试获取一个脚本来将其降级从4到3。那么数据库很容易就会被损坏。无论是将其指向真正处于状态4的数据库,还是将其推送到状态4的本地数据库,都会在制造不可逆转的混乱之前让你思考。另一方面,它可以通过一些-Force开关或大红色警告来支持。 :) - cincura.net
2
我曾考虑将数据库状态设为5,并现在想要一个脚本将其从5降级到2。 EF迁移强制我从5降级到4,然后再从4降级到3,最后从3降级到2,而我希望只产生一个包含所有这些降级的脚本,而不需要真正执行它们。(例如,对于升级,您可以拥有处于状态5的数据库,并生成从2到5的升级脚本)。 - mayash
或者您可以拥有一个处于状态5的数据库,并生成从2到4的升级脚本。 - mayash
2
您可以从当前版本(5)创建降级脚本到版本2。您只需要使用第一个命令并输入第二个迁移的名称即可运行。 - Ladislav Mrnka
对于使用C#的DbMigratorMigratorScriptingDecorator的任何人,您都需要通过迁移器的ScriptUpdate方法传递sourceMigration: null。即使您传递了最新的迁移ID,它仍然会抱怨您不能在两个版本之间降级(与OP相同的错误)。 - aaaaaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接