Entity Framework 核心 2.0 - 运行 逐步迁移

Entity Framework Core 2.0 - Run migrations step by step

在 EF6 中,我可以检索迁移并​​ 运行 逐步进行。
有没有办法在 EF Core 中做类似的事情?

EF 6 代码

public static void RunMigration(this DbContext context, DbMigration migration, string providerName, string manifest)
{
    var prop = migration.GetType().GetProperty("Operations", BindingFlags.NonPublic | BindingFlags.Instance);
    if (prop != null)
    {
        IEnumerable<MigrationOperation> operations = prop.GetValue(migration) as IEnumerable<MigrationOperation>;
        MigrationSqlGenerator generator = (new DbMigrationsConfiguration()).GetSqlGenerator(providerName);
        var statements = generator.Generate(operations, manifest);
        foreach (MigrationStatement item in statements)
            context.Database.ExecuteSqlCommand(item.Sql);
    }
}

可以使用DatabaseFacadeclass的GetPendingMigrations扩展方法(由DbContextDatabase属性返回)来获取待定迁移名称的列表。

然后你可以获得IMigrator service and use Migrate传递每个目标迁移名称的方法:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;

DbContext db = ...;
var pendingMigrations = db.Database.GetPendingMigrations().ToList();
if (pendingMigrations.Any())
{
    var migrator = db.Database.GetService<IMigrator>();
    foreach (var targetMigration in pendingMigrations)
        migrator.Migrate(targetMigration);
}