3

Dans EF6, je pouvais récupérer les migrations et les exécuter étape par étape.
Existe-t-il un moyen de faire quelque chose de similaire dans EF Core?Entity Framework Core 2.0 - Exécuter les migrations pas à pas

EF 6 Code

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

Répondre

3

Vous pouvez utiliser la méthode d'extension GetMigrations de la classe DatabaseFacade (retourné par Database propriété du DbContext) pour obtenir la liste des noms de migration en attente.

Ensuite, vous pouvez obtenir IMigrator service et utiliser la méthode Migrate passant chaque nom de migration cible:

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