Comment vérifier si une migration doit être exécutée ou si elle a été exécutée avec un migrateur fluide ?
-
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 ?
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 leApplyMigrationUp
méthode, qui est appelée à chaque fois qu'une migration est appliquée, et suit/enregistre les migrations appliquéesCréer une coutume
IAnnouncer
implémentation, configurez FluentMigrator pour l'utiliser via leIRunnerContext
et dans ton annonceurSay
méthode vérifier que lemessage
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 unMigrationRunner
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
}