Entity framework 实体框架核心2.0-逐步运行迁移

Entity framework 实体框架核心2.0-逐步运行迁移,entity-framework,entity-framework-migrations,entity-framework-core,Entity Framework,Entity Framework Migrations,Entity Framework Core,在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 |

在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);
    }
}
publicstaticvoidrunmigration(此DbContext上下文、DbMigration迁移、字符串提供程序名、字符串清单)
{
var prop=migration.GetType().GetProperty(“操作”,BindingFlags.NonPublic | BindingFlags.Instance);
如果(prop!=null)
{
IEnumerable operations=prop.GetValue(迁移)作为IEnumerable;
MigrationSqlGenerator generator=(新的dbmigOptionsConfiguration()).GetSqlGenerator(providerName);
var语句=generator.Generate(操作、清单);
foreach(报表中的迁移报表项)
context.Database.ExecuteSqlCommand(item.Sql);
}
}
您可以使用
DatabaseFacade
类的扩展方法(由
DbContext
Database
属性返回)来获取挂起的迁移名称列表

然后,您可以获得传递每个目标迁移名称的服务和使用方法:

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);
}
使用Microsoft.EntityFrameworkCore;
使用Microsoft.EntityFrameworkCore.Infrastructure;
使用Microsoft.EntityFrameworkCore.Migrations;
DbContext db=。。。;
var pendingMigrations=db.Database.GetPendingMigrations().ToList();
if(pendingMigrations.Any())
{
var migrator=db.Database.GetService();
foreach(挂起迁移中的var targetMigration)
migrator.Migrate(targetMigration);
}