当我之间有 60 或 70 次迁移并且我不想/不能进行完全回滚时,如何强制重新运行 3 个月大的迁移?
显然,提供我希望它重新运行的值的 --version 参数不起作用,并且仅从 VersionInfo 表中删除值也不起作用(两者一起完成似乎也没有任何好处) .
有没有办法让 FluentMigrator 从几个月前重新运行一次迁移?我在解决问题吗?
当我之间有 60 或 70 次迁移并且我不想/不能进行完全回滚时,如何强制重新运行 3 个月大的迁移?
显然,提供我希望它重新运行的值的 --version 参数不起作用,并且仅从 VersionInfo 表中删除值也不起作用(两者一起完成似乎也没有任何好处) .
有没有办法让 FluentMigrator 从几个月前重新运行一次迁移?我在解决问题吗?
我不确定(在非生产环境中小心尝试),但您可以欺骗 fluentmigrator 更改 versionInfo 表。
将那些您不想执行的迁移添加到 versionInfo
最后,确保您要执行的迁移不在 versionInfo 表中。
当然,最好在进行任何更改之前导出或备份 versionInfo 表。
对于未来的读者,
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 上测试你的迁移,在完美的世界中我们不应该做这些事情,但我们不是生活在完美的世界中。