我有一个特定的数据库脚本,它需要作为最后一个迁移脚本运行,并且每次我在数据库上运行迁移时都需要运行它(即使之前已经运行过)。

我可以使用非常大的迁移ID来确保此迁移最后运行。但是,我不知道该如何强制每次重新运行此迁移:一旦运行,它将被添加到dbo.VersionInfo表中,而下一次FluentMigrator在该表中看到它时,它将不会运行再次。

[Migration ( 209912312359 )]
public class M209912312359 : Migration
{
    public override void Down ()
    {
        // I want this particular migration to always run
        // as the last migration script and to run every time.
    }
}


是否有某种迁移属性告诉FluentMigrator每次都运行此脚本,而不管以前的运行情况如何? (Migration基类对此没有任何要重写的东西。)

我正在使用FluentMigrator 1.4。

编辑:

这是清除数据库中某些数据的数据迁移。在工作中,我们有大量的数据库(相同的架构,不同的数据)。一个特定的表(我们称其为dbo.A)必须在所有数据库中具有相同顺序的相同数据。我们使用迁移将数据添加到该表中,但是有时-根据特定数据库中运行的迁移-dbo.A的实例可能会不同步。

迁移的目的是确保dbo.A的所有实例都包含相同顺序的相同数据。我们不能删除dbo.A并只能重新创建它,因为它的ID列用作外键。

如果可能的话,我想拥有一个迁移解决方案,因为作为部署的一部分,迁移是唯一可以保证在我们所有环境中运行的东西,而更改它将非常困难。 (如果FluentMigrator无法做到这一点,我们可能别无选择。)

最佳答案

从上面的评论中得到了这一点,但这可能会对其他人有所帮助

using FluentMigrator;
using System;

namespace Example
{
    [Maintenance(MigrationStage.AfterAll)]
    public class RefreshAllViews : FluentMigrator.Migration
    {
        public override void Up()
        {
            Execute.Sql(@"
                DECLARE views_cursor CURSOR FOR
                SELECT name FROM sysobjects WHERE type = 'V' AND uid = 1
                OPEN views_cursor

                DECLARE @view NVARCHAR(500)
                FETCH NEXT FROM views_cursor INTO @view
                WHILE @@FETCH_STATUS = 0
                BEGIN
                    BEGIN TRY
                        EXEC sp_refreshview @view
                    END TRY
                    BEGIN CATCH
                        PRINT 'VIEW NAME: ' + @view +
                              ', ERROR NUMBER: ' + Cast(ERROR_NUMBER() as VARCHAR) +
                              ', ERROR MESSAGE: ' + ERROR_MESSAGE()
                    END CATCH

                    FETCH NEXT FROM views_cursor INTO @view
                END

                CLOSE views_cursor
                DEALLOCATE views_cursor");
        }

        public override void Down()
        {
            throw new NotImplementedException();
        }
    }
}

10-07 20:01
查看更多