Como verificar se uma migração precisa ser executado ou não executar com a fluente migrator?
-
23-12-2019 - |
Pergunta
Usando FluentMigrator, existe maneira de saber se o MigrateUp() função, de facto, irá migrar algo ou se ele já está atualizado?
Solução
Não há nenhuma maneira fácil de dizer, usando a api pública se o MigrateUp
método irá fazer algo ou não.
No entanto, existem várias "outras" formas de se contornar isso que dependem do funcionamento do FluentMigrator:
Derivam da
MigrationRunner
, substituir oApplyMigrationUp
o método, que é chamado cada vez que uma migração é aplicado, e a faixa/log aplicada migraçõesCriar um personalizado
IAnnouncer
implementação, configurar FluentMigrator para usá-lo através doIRunnerContext
e em seu locutorSay
método de seleção que omessage
parâmetro contém o texto"migrated"
o que significa uma etapa da migração tem sido aplicada.- Olhar para o pendente migrações antes de executar
MigrateUp
, se você pode obter uma referência em umMigrationRunner
você pode:
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
}