Entity Framework Core 2.0-逐步运行迁移 [英] Entity Framework Core 2.0 - Run migrations step by step
本文介绍了Entity Framework Core 2.0-逐步运行迁移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在EF6中,我可以检索迁移并逐步运行它。
是否可以在EF Core中执行类似的操作?
In EF6 I could retrieve migrations and run it step by step.
Is there a way to do something similar in 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);
}
}
推荐答案
您可以使用 DatabaseFacade
类的值(由 DbContext
Database 属性返回>)以获得挂起的迁移名称的列表。
You can use the GetPendingMigrations extension method of the DatabaseFacade
class (returned by Database
property of the DbContext
) to get the list of the pending migration names.
然后,您可以获得 IMigrator
服务并使用 Migrate
方法传递每个目标迁移名称:
Then you can obtain IMigrator
service and use Migrate
method passing each target migration name:
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);
}
这篇关于Entity Framework Core 2.0-逐步运行迁移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文