我希望能夠手動執行遷移的Up()方法。目前我試圖做到這一點,但調用包含CreateTable方法不會創建表。我懷疑連接沒有正確設置。並沒有屬性來設置它。在EF中手動調用DbMigration.Up
我也試過DbMigrator,但它調用了一些內部EF遷移方法。
那麼有誰知道如何設置連接以供DbMigration.Up方法使用?
在此先感謝!
我希望能夠手動執行遷移的Up()方法。目前我試圖做到這一點,但調用包含CreateTable方法不會創建表。我懷疑連接沒有正確設置。並沒有屬性來設置它。在EF中手動調用DbMigration.Up
我也試過DbMigrator,但它調用了一些內部EF遷移方法。
那麼有誰知道如何設置連接以供DbMigration.Up方法使用?
在此先感謝!
在過去的遷移完全手動控制,則可以使用下面的擴展方法:
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);
}
}
示例: 有這樣的遷移:
public class CreateIndexOnContactCodeMigration : DbMigration
{
public override void Up()
{
this.CreateIndex("Contacts", "Code");
}
public override void Down()
{
base.Down();
this.DropIndex("Contacts", "Code");
}
}
你可以對你的DbContext運行:
using (var dbCrm = new CrmDbContext(connectionString))
{
var migration = new CreateIndexOnContactCodeMigration();
migration.Up(); // or migration.Down();
dbCrm.RunMigration(migration);
}
我用下面的代碼,以明確可以升級我的數據庫中的Application_Start事件:
var config = new MyDatabaseMigrationsConfiguration();
var migrator = new System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator(new System.Data.Entity.Migrations.DbMigrator(config), new MyCommonMigrationsLogger());
if (migrator.GetPendingMigrations().Any())
{
migrator.Update();
}
據我知道這將使用從我DatabaseContext ConnectionString中默認(命名),以應用掛起變化。
我已經試過這個,但它不是我要找的。我希望能夠在我的初始化程序中執行以下操作:'Migrations.MigrationV103 migration = new Migrations.MigrationV103(); migration.Up();' –
可能不是什麼OP後,但日誌遷移行代碼是真棒!感謝您的代碼片段。我現在可以記錄程序遷移。 – BenSwayne
實體框架是開源的,所以你可以看看源代碼,找出他們在做什麼使遷移發生。 http://entityframework.codeplex.com/SourceControl/latest –
感謝您的提示。不幸的是我找不到解決方案。看起來我正在嘗試做我不應該做的事情。以其他方式解決問題。 –