Run FluentMigrator for one specific migration only

239 views Asked by At

We are using FluentMigrator with C# to run our database changes and we don't use any tag as we have simple solution, so all our migrations are without any tags.

I know it seems not common, but I hope there is a solution in their API.

Is there a programmatic way to run one specific migration by specifying its version number (No tags)?

I am not talking about

migrationRunner.MigrateUp(version);

Because that will run all migrations up to that version.

I want to apply one that specific migration only and not run the previous versions if they are not applied.

So if the last applied version is 26, and I want to run version 30. So Is there a way to run only 30 without running 27,28,29 ?

As I said, all our migrations have no tags, so it is difficult to do it with tags.

2

There are 2 answers

0
Ghassan Karwchan On BEST ANSWER

It turns out there is a way in their API to do it.
I had to read their code.

If you ever want to do this crazy thing, you can do this in the code:

private static void ApplySpecificMigration(IServiceProvider serviceProvider, long version)
{
    var runner = serviceProvider.GetRequiredService<IMigrationRunner>();

    
    var targetMigration = runner.MigrationLoader.LoadMigrations()
        .FirstOrDefault(migration => migration.Key == version);

    ((MigrationRunner) migrationRunner).ApplyMigrationUp(migration.Value, true);
}
2
Orifjon On

You can update migration version to previous one in migration table and use migrationRunner.MigrateUp(version);. It runs migrations in between, which would be your selected version.