uzyskać pełną ręczną kontrolę nad migracjami, można użyć następującą metodę rozszerzenia:
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);
}
}
Przykład: Mając migracja tak:
public class CreateIndexOnContactCodeMigration : DbMigration
{
public override void Up()
{
this.CreateIndex("Contacts", "Code");
}
public override void Down()
{
base.Down();
this.DropIndex("Contacts", "Code");
}
}
Można go uruchomić na swojej DbContext:
using (var dbCrm = new CrmDbContext(connectionString))
{
var migration = new CreateIndexOnContactCodeMigration();
migration.Up(); // or migration.Down();
dbCrm.RunMigration(migration);
}
Entity Framework jest open source, więc można spojrzeć na kod źródłowy, aby dowiedzieć się dokładnie, co robią aby dokonać migracji. http://entityframework.codeplex.com/SourceControl/latest –
Dzięki za napiwek. Niestety nie mogłem znaleźć rozwiązania. Wygląda na to, że próbuję zrobić to, czego nie powinienem. Zarządzaj, aby rozwiązać problem w inny sposób. –