如何使用Fluent Migrator检查是否需要运行或已经运行了迁移?

6
使用FluentMigrator,有没有办法找出MigrateUp()函数是否确实会进行迁移或者是否已经是最新版本?
1个回答

14

使用公共API没有简单的方法可以确定MigrateUp方法是否会执行任何操作。

但是,有多种“其他”方法可以解决此问题,这些方法取决于FluentMigrator的内部:

  • MigrationRunner派生,覆盖ApplyMigrationUp方法,该方法在每次应用迁移时都会被调用,并跟踪/记录已应用的迁移

  • 创建自定义的IAnnouncer实现,在IRunnerContext中配置FluentMigrator以使用它,并在您的播音员的方法中检查message参数是否包含文本"migrated",这意味着已应用迁移步骤。

  • 在运行MigrateUp之前查看待处理的迁移,如果您可以获取MigrationRunner的引用,则可以:
    MigrationRunner runner = ... // get a reference to the runner
    if (runner.MigrationLoader.LoadMigrations() // get all the migrations
            .Any(pair => !runner.VersionLoader
                                .VersionInfo.HasAppliedMigration(pair.Key)))
            // check which migrations have been applied
    {
         // there are pending migrations, do your logic here
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接