我正在開發每個版本(更新視圖,添加/刪除列)之間的數據庫架構可能不同的窗口應用程序。因此,我正在尋找讓應用程序在客戶端計算機上啓動時EF更新架構的方式。我讀了一些文章,但他們指向包管理器命令Add-Migration, Update-Database
,我不能在我的情況下使用。 我使用了存儲庫模式,所以當我嘗試Database.SetInitializer<C>(new MigrateDatabaseToLatestVersion<C, Configuration<C>>());
我得到無法更新數據庫以匹配當前模型,因爲有掛起的更改,並且自動遷移被禁用。將掛起的模型更改寫入基於代碼的遷移或啓用自動遷移。將DbMigrationsConfiguration.AutomaticMigrationsEnabled設置爲true以啓用自動遷移。異常 但是,當我設置AutomaticMigrationsEnabled = true;
我得到了另一個錯誤:表''表名'已經存在。使用實體框架代碼首先遷移來更新應用程序啓動時的數據庫架構
0
A
回答
0
我找到了一個解決辦法是創建一個擴展方法
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);
}
}
然後創建類MyMigration
它繼承DbMigration像正常遷移,而當應用程序啓動,我會檢查,並迫使它象下面這樣運行:
var myMigration = new MyMigration();
myMigration.Up();
this.RunMigration(myMigration);
相關問題
- 1. 實體框架代碼首先遷移和數據遷移
- 2. 用實體框架更新數據庫模式代碼首先
- 3. 如何更新實體框架7遷移和數據庫 - 代碼優先
- 4. 實體框架中的不同dll代碼首先遷移
- 5. 實體框架代碼首先使用Where子句更新
- 6. 實體框架代碼首先遷移 - 刪除列
- 7. 實體框架代碼首先:觸發特定遷移
- 8. 實體框架4.3更新數據庫時的遷移異常
- 9. 實體框架代碼優先自動遷移到Azure數據庫
- 10. 實體框架代碼首先生成數據庫不正確
- 11. 實體框架代碼首先定義數據庫名稱
- 12. 實體框架代碼首先恢復數據庫爲空
- 13. 實體框架代碼首先,不生成數據庫
- 14. 實體框架4.3多應用程序使用的數據庫遷移策略
- 15. 我在實體框架代碼首先
- 16. 實體框架代碼首先愁楚
- 17. 實體框架代碼首先FK場
- 18. 實體框架代碼首先+ MySQL ... NullReferenceException
- 19. 部署實體框架代碼首先
- 20. 變化實體框架代碼首先
- 21. 移動一個實體框架應用程序和數據庫
- 22. 實體框架代碼優先自動模式遷移
- 23. 實體框架代碼優先 - 使用MySql創建數據庫?
- 24. 刪除級聯更新到實體框架代碼首先
- 25. 如何使用代碼優先遷移來更新數據庫?
- 26. 實體框架啓用遷移-EnableAutomaticMigrations?
- 27. 實體框架代碼首先配置每個實體的架構
- 28. 實體框架:無法更改代碼優先遷移的數據源
- 29. 首先在實體框架數據庫中使用Enum?
- 30. 實體框架數據庫首先只使用某些列
請參閱[這裏](http://stackoverflow.com/questions/35144784/how-to-use-migration-programmatically-in-entityframework-codefirst)和[這裏](https://romiller.com/2012/02/09/running-scripting-migrations-from-code /) –
我已閱讀並嘗試以上但未成功,我更新了我的問題以獲取更多詳細信息@SteveGreene –
聽起來像您沒有正確配置遷移。您需要進行初始基線遷移「添加遷移MyBaseline -IgnoreChanges」。然後,爲隨後的更改正常添加遷移。 –