我正在開發每個版本(更新視圖,添加/刪除列)之間的數據庫架構可能不同的窗口應用程序。因此,我正在尋找讓應用程序在客戶端計算機上啓動時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. 使用實體框架添加數據庫觸發器代碼首先遷移
- 4. 使用實體框架代碼首先
- 5. 實體框架使用代碼首先
- 6. 首先使用實體框架代碼與任何數據庫
- 7. 實體框架代碼優先:啓用的遷移錯誤
- 8. 嘗試使用實體框架更新數據庫代碼首先
- 9. 如何更新實體框架7遷移和數據庫 - 代碼優先
- 10. 實體框架中的不同dll代碼首先遷移
- 11. 與代碼首先遷移實體框架的多個項目
- 12. 實體框架代碼首先使用Where子句更新
- 13. 實體框架代碼首先數據遷移不適用於VS2012 Web部署
- 14. 實體框架代碼首先與遠程數據庫
- 15. 實體框架代碼首先:觸發特定遷移
- 16. 實體框架代碼首先遷移 - 刪除列
- 17. 實體框架4.3更新數據庫時的遷移異常
- 18. 實體框架代碼優先:遷移失敗,更新數據庫,迫使不必要的附加遷移
- 19. 實體框架代碼首先爲數據庫表的子集
- 20. 使用代碼優先遷移和實體框架
- 21. 實體框架代碼首先,通過「先典」更新父
- 22. 不支持'數據源'關鍵字。 (ASP.Net應用程序,實體框架5,代碼首先,遷移)
- 23. 實體框架代碼優先+遷移並創建新數據庫
- 24. 實體框架代碼優先自動遷移到Azure數據庫
- 25. 實體框架代碼首先定義數據庫名稱
- 26. 實體框架代碼首先生成數據庫不正確
- 27. 實體框架代碼首先恢復數據庫爲空
- 28. 實體框架代碼首先,不生成數據庫
- 29. 使用實體框架4.3更新實體 - 代碼優先
- 30. 實體框架4.3多應用程序使用的數據庫遷移策略
請參閱[這裏](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」。然後,爲隨後的更改正常添加遷移。 –