强制使用FluentMigrator重新运行先前的迁移

时间:2013-12-04 17:34:36

标签: fluent-migrator

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

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

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

2 个答案:

答案 0 :(得分:0)

我不确定(在非生产环境中谨慎使用),但是您可以欺骗流畅的migrator来更改versionInfo表。

  1. 首先,使用migrate --listmigrations获取所有可用内容 装配中的迁移
  2. 将那些您想要进行迁移的迁移添加到versionInfo

  3. 最后,确保您要执行的迁移不在其中 版本信息表。

  4. 当然,在任何更改之前进行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上测试您的迁移,在理想情况下,我们不必做这些事情,但我们并不生活在理想环境中。