当我在中间进行60或70次迁移并且我不想/不能完全回滚时,如何强制执行3个月的迁移重新运行?
显然提供我希望它重新运行的值的--version参数不起作用,也不能只删除VersionInfo表中的值(两者一起完成也似乎没有任何好处)。
有没有办法让FluentMigrator从几个月前重新运行一次迁移?我能解决这个问题吗?
答案 0 :(得分:0)
我不确定(在非生产环境中谨慎使用),但是您可以欺骗流畅的migrator来更改versionInfo表。
将那些您想要进行迁移的迁移添加到versionInfo
最后,确保您要执行的迁移不在其中 版本信息表。
当然,在任何更改之前进行versionInfo表的导出或备份是个好主意。
答案 1 :(得分:-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上测试您的迁移,在理想情况下,我们不必做这些事情,但我们并不生活在理想环境中。