Wie kann ich überprüfen, ob eine Migration durchgeführt werden muss oder mit Fluent Migrator durchgeführt wurde?
-
23-12-2019 - |
Frage
Gibt es mit FluentMigrator eine Möglichkeit herauszufinden, ob die Funktion MigrateUp() tatsächlich etwas migriert oder ob es bereits auf dem neuesten Stand ist?
Lösung
Es gibt keine einfache Möglichkeit, mithilfe der öffentlichen API festzustellen, ob die MigrateUp
Methode wird etwas bewirken oder nicht.
Es gibt jedoch mehrere „andere“ Möglichkeiten, dies zu umgehen, die von den Interna von FluentMigrator abhängen:
Ableiten von
MigrationRunner
, überschreiben Sie dieApplyMigrationUp
Methode, die jedes Mal aufgerufen wird, wenn eine Migration angewendet wird, und verfolgt/protokolliert die angewendeten MigrationenErstellen Sie eine benutzerdefinierte
IAnnouncer
Konfigurieren Sie FluentMigrator so, dass es über die Implementierung verwendet wirdIRunnerContext
und in Ihrem AnsagerSay
Methode überprüfen, ob diemessage
Parameter enthält den Text"migrated"
Dies bedeutet, dass ein Migrationsschritt angewendet wurde.- Sehen Sie sich vor der Ausführung die ausstehenden Migrationen an
MigrateUp
, wenn Sie eine Referenz zu einem bekommen könnenMigrationRunner
du kannst:
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
}