3

EF6では、移行を取得して段階的に実行することができました。
EFコアで同様のことを行う方法はありますか?Entity Frameworkコア2.0 - 段階的に移行を実行

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); 
    } 
} 

答えて

3

あなたは保留中の移行名のリストを取得するには(DbContextDatabaseプロパティによって返される)DatabaseFacadeクラスのGetMigrations拡張メソッドを使用することができます。

その後、あなたはIMigratorサービスを取得し、各ターゲットの移行名渡し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); 
} 
関連する問題