Comment vérifier si une migration doit être exécutée ou si elle a été exécutée avec un migrateur fluide ?

StackOverflow https://stackoverflow.com//questions/22076745

  •  23-12-2019
  •  | 
  •  

Question

En utilisant FluentMigrator, existe-t-il un moyen de savoir si la fonction MigrateUp() va effectivement migrer quelque chose ou si elle est déjà à jour ?

Était-ce utile?

La solution

Il n'existe pas de moyen simple de savoir à l'aide de l'API publique si le MigrateUp la méthode fera quelque chose ou non.

Cependant, il existe plusieurs « autres » moyens de contourner ce problème qui dépendent des composants internes de FluentMigrator :

  • Dérivé du MigrationRunner, remplacez le ApplyMigrationUp méthode, qui est appelée à chaque fois qu'une migration est appliquée, et suit/enregistre les migrations appliquées

  • Créer une coutume IAnnouncer implémentation, configurez FluentMigrator pour l'utiliser via le IRunnerContext et dans ton annonceur Say méthode vérifier que le message le paramètre contient le texte "migrated" ce qui signifie qu'une étape de migration a été appliquée.

  • Regardez les migrations en attente avant d'exécuter MigrateUp, si vous pouvez obtenir une référence sur un MigrationRunner tu peux:
    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
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top