如何检查是否需要运行迁移或是否使用流畅的迁移器运行迁移?

时间:2014-02-27 18:06:15

标签: fluent-migrator

使用FluentMigrator,有没有办法找出MigrateUp()函数是否确实会迁移某些东西或者它是否已经是最新的?

1 个答案:

答案 0 :(得分:11)

使用公共API无法轻易告诉MigrateUp方法是否会做某事。

然而,有多种“其他”方式依赖于FluentMigrator的内部:

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

  • 创建自定义IAnnouncer实施,配置FluentMigrator以通过IRunnerContext和播音员Say方法使用它,检查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
    }