6

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

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

有没有办法让 FluentMigrator 从几个月前重新运行一次迁移?我在解决问题吗?

4

2 回答 2

0

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

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

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

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

于 2015-11-15T19:28:29.087 回答
-1

对于未来的读者,

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

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

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

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

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

于 2018-10-03T12:38:58.190 回答