【问题标题】:EF 4.3 Migration - how to produce a downgrade script?EF 4.3 迁移 - 如何生成降级脚本?
【发布时间】:2012-06-03 15:36:48
【问题描述】:

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

我正在将 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.

任何想法如何生成降级脚本?

谢谢。

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-4.3 entity-framework-migrations


    【解决方案1】:

    迁移 API 似乎希望您只想从“最新版本”进行降级。

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

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

    如果这不是您的最后一次迁移,您需要先将您的开发数据库恢复到它:

    Update-Database -TargetMigration:"201205161203310_BlogLimitsAndTableRename"
    

    现在您应该可以使用第一个命令来获取脚本了。

    【讨论】:

    • 这有点道理。想象一下,您的数据库处于状态 5,您将尝试获取一个脚本来从 4 降级到 3。那么数据库很容易损坏。要么将它指向真正处于状态 4 的 db,要么将一个本地推到状态 4,让您在造成不可逆转的混乱之前考虑一下。 OTOH 可以通过一些 -Force 开关或大红色警告来支持它。 :)
    • 我想过让数据库处于状态 5,现在得到一个脚本将其从 5 降级到 2。EF 迁移迫使我从 5 降级到 4,然后从 4 降级到 3,然后从3 到 2,而我只希望生成一个脚本,该脚本已经包含所有这些降级,而无需真正执行它们。 (例如升级,您可以拥有一个状态为 5 的数据库,并生成一个从 2 升级到 5 的脚本)。
    • 或者你可以有一个状态为5的数据库并生成一个从2升级到4的脚本。
    • 您可以创建从当前版本(5)到版本2的降级脚本。您只需使用第二次迁移的名称运行第一个提到的命令。
    • 对于通过 c# 使用 DbMigratorMigratorScriptingDecorator 的任何人,奇怪的是您必须将 sourceMigration: null 传递给迁移器的 ScriptUpdate 方法。即使你传递了最新的迁移id,它仍然抱怨你不能在两个版本之间降级(与OP相同的错误)
    猜你喜欢
    • 2021-03-19
    • 2013-11-11
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多