【问题标题】:Force rerunning a previous migration with FluentMigrator使用 FluentMigrator 强制重新运行之前的迁移
【发布时间】:2018-10-03 20:38:58
【问题描述】:

当我在中间进行了 60 或 70 次迁移并且我不想/不能进行完全回滚时,如何强制重新运行 3 个月前的迁移?

显然,提供我希望它重新运行的值的 --version 参数不起作用,并且仅从 VersionInfo 表中删除该值也不起作用(两者一起完成似乎也没有任何好处)。

有没有办法让 FluentMigrator 从几个月前重新运行一次迁移?我是不是在挑剔这个问题?

【问题讨论】:

    标签: fluent-migrator


    【解决方案1】:

    我不确定(在非生产环境中谨慎尝试),但您可以欺骗 fluentmigrator 更改 versionInfo 表。

    1. 首先,使用 migrate --listmigrations 获取所有可用的 程序集中的迁移
    2. 将您不想执行的迁移添加到 versionInfo 中

    3. 最后,确保您要执行的迁移不在 versionInfo 表。

    当然,最好在进行任何更改之前导出或备份 versionInfo 表。

    【讨论】:

      【解决方案2】:

      对于未来的读者,

      FluentMigrator 将查看最新的迁移 AppliedOn 日期,然后从那里继续,因此,如果您的迁移是几个月前的,即使您从 versioninfo 表中删除该条目,它也不会重新运行迁移。

      您可以作弊的方法是再次添加迁移,但这次添加的是防御性编码。即,如果您要应用的更改已经应用,则不要再尝试这样做。我不知道您的迁移情况如何,但这里有一个我所说的防御性编码的例子:

      IF COL_LENGTH('FollowOnProduct', 'ProductType') IS NULL
      BEGIN
          ALTER TABLE FollowOnProduct
              ADD ProductType VARCHAR(64) NULL 
      END
      

      如果 ProductType 已经存在,这不会改变表并尝试添加列。

      免责声明:这是一个 hack,先在 dev/test 上测试您的迁移,然后在 uat/production 上运行它们,在完美的世界中我们不应该做这些事情,但我们并不是生活在完美的世界中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-23
        • 2023-04-10
        • 1970-01-01
        相关资源
        最近更新 更多