Đối với kiểm soát hoàn toàn thủ công qua di cư, bạn có thể sử dụng phương pháp mở rộng sau:
public static void RunMigration(this DbContext context, DbMigration migration)
{
var prop = migration.GetType().GetProperty("Operations", BindingFlags.NonPublic | BindingFlags.Instance);
if (prop != null)
{
IEnumerable<MigrationOperation> operations = prop.GetValue(migration) as IEnumerable<MigrationOperation>;
var generator = new SqlServerMigrationSqlGenerator();
var statements = generator.Generate(operations, "2008");
foreach (MigrationStatement item in statements)
context.Database.ExecuteSqlCommand(item.Sql);
}
}
Ví dụ: Có một sự chuyển đổi như thế này:
public class CreateIndexOnContactCodeMigration : DbMigration
{
public override void Up()
{
this.CreateIndex("Contacts", "Code");
}
public override void Down()
{
base.Down();
this.DropIndex("Contacts", "Code");
}
}
Bạn có thể chạy nó chống lại DbContext của bạn:
using (var dbCrm = new CrmDbContext(connectionString))
{
var migration = new CreateIndexOnContactCodeMigration();
migration.Up(); // or migration.Down();
dbCrm.RunMigration(migration);
}
Nguồn
2016-01-13 13:18:45
Entity Framework là mã nguồn mở, vì vậy bạn có thể nhìn vào mã nguồn để tìm ra chính xác những gì họ đang làm để làm cho việc di chuyển diễn ra. http://entityframework.codeplex.com/SourceControl/latest –
Cảm ơn mẹo. Đáng tiếc là tôi không thể tìm ra giải pháp. Có vẻ như tôi đang cố gắng làm những gì tôi không phải làm. Quản lý để giải quyết vấn đề theo cách khác. –