Skip to content

Validate migration IDs #27115

Open
Open

Description

The bug

So in a project of mine we want to run migrations on startup. In the case of a failure in one of the migrations in startup we want to log which migration has failed and what has failed in the migration. So to achieve this i want to run each pending migration one by one, so if one fails i know which migration is failing and i can log this.

To achieve this i saw that the IMigrator offers the possibility to run migrations until a specified migration which is perfect. However when i tried this it throws the error "The migration was not found".

My code is extremely simple:

var migrator = dbContext.Database.GetService<IMigrator>();
var pendingMigrations = dbContext.Database.GetPendingMigrations();
foreach(var pendingMigration in pendingMigrations)
{
    try
    {
        migrator.Migrate(pendingMigration);
    }
    catch (Exception e)
    {
        var someException = e;
    }
}

As you can see here i get the pending migrations from the Database object and then just want to run those individually. I also can see when debugging that in the MigrationAssembly within the migrator the migration name is there in the dictionary, so it seems very weird that this error is popping up.

Also when running dbContext.Database.Migrate() it works just fine

Here i have setup an example project of my exact scenario which is not working:
https://github.com/bramve-fenetre/DemoMigratorIssue

Include provider and version information

EF Core version: Both 3.1 and 6.0
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: Both 3.1 and 6.0
Operating system: Windows 10
IDE: Visual Studio 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions