¿Cómo comprobar si es necesario ejecutar una migración o si se ejecutó con fluent migrator?
-
23-12-2019 - |
Pregunta
Usando FluentMigrator, ¿hay alguna manera de saber si la función MigrateUp() realmente migrará algo o si ya está actualizada?
Solución
No hay una manera fácil de saber usando la API pública si el MigrateUp
El método hará algo o no.
Sin embargo, existen "otras" formas de solucionar este problema que dependen de las funciones internas de FluentMigrator:
derivar de la
MigrationRunner
, anular elApplyMigrationUp
método, que se llama cada vez que se aplica una migración, y rastrea/registra las migraciones aplicadasCrear una costumbre
IAnnouncer
implementación, configure FluentMigrator para usarlo a través delIRunnerContext
y en tu locutorSay
método comprobar que elmessage
El parámetro contiene el texto."migrated"
lo que significa que se ha aplicado un paso de migración.- Mira las migraciones pendientes antes de ejecutar
MigrateUp
, si puede obtener una referencia sobre unMigrationRunner
puede:
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
}