我正在使用實體框架6.1.3我的ASP.NET項目的代碼優先遷移。我禁用了自動遷移。我運行了Add-Migration
和Update-Database
命令,EF無法找到__MigrationHistory
和DbContext
之間的任何未決更改。但是,當我啓動應用程序時,它會嘗試從上下文創建表,如果這些表已存在於__MigrationHistory
表中的最新條目中。 (我從遷移表中檢查了EDMX XML文件,只是可以肯定的)。你有什麼想法,我如何解決這個問題,而不會丟失任何數據? EF6嘗試在運行時創建表,但沒有未完成的更改
回答
如果你不想讓你的應用程序始終重新在運行時創建的表,你必須改變數據庫的初始化。在你DBContext
類,你應該會看到像這樣的代碼(假設你的DBContext
被稱爲MyDbContext
):
static MyDbContext()
{
// You should see this...
Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
// ... or this ...
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
}
首先初始化將始終重新創建數據庫,第二初始化只會重新創建數據庫,如果該模型具有改變。如果未指定初始化程序,則缺省值爲CreateDatabaseIfNotExists
,如名稱所示,它將創建數據庫(如果尚不存在)。您可以選擇在您的配置文件中設置初始值設定項。有關更多示例和信息,請參閱this resource。
我有這段代碼在我的上下文'OnModelCreating'方法'Database.SetInitializer(新MigrateDatabaseToLatestVersion
這是您看到初始化程序被設置的唯一位置嗎?運行搜索'SetInitializer'來查看它是否在其他地方彈出。 – Chase
我把它放在另一個'DbContext'中,我需要它,因爲對於這種情況我啓用了自動遷移(這是ASP.NET Identity Framework的上下文)。這是不是會殺死我的自動遷移?如果我甚至從那裏刪除它,EF不會嘗試重新創建數據庫,但是這是正確的方式嗎? – ax1mx2
- 1. 嘗試在運行時更改JTextPane的背景,但成功但出錯
- 2. 多項式類在調試器中運行良好,但在嘗試生成並運行時沒有運行
- 3. rpart在嘗試創建分類樹時未運行
- 4. 401嘗試插入(創建)新表時未經授權嘗試
- 5. 當在IDEA中運行時測試完成但在Maven中運行時失敗
- 6. 嘗試在foreach內創建字符串時未形成字符
- 7. 命令已成功完成,但是...表未創建
- 8. 嘗試在運行時更改CroppedBitmap的SourceRect
- 9. Android:嘗試在運行時更改TextView的寬度
- 10. 嘗試在運行時更改TextView的顏色,文本「消失」
- 11. 行更新沒有完成
- 12. 批次在第三次嘗試中正確運行,但在任務管理器中完全沒有運行
- 13. 線程:我嘗試在Android上創建一個時鐘,但handler.sendMessage沒有和(super.handleMessagee)
- 14. 終端在嘗試創建git時意外運行命令
- 15. 成功運行hello world程序後,快速嘗試更改
- 16. CAML更新正在運行,但沒有更改數據(Sharepoint 2007)
- 17. $。運行完成前未完成
- 18. 運行測試時未創建應用程序表
- 19. XCode在「運行腳本」階段沒有完成測試版本
- 20. 沒有Tomcat運行Jenkins,嘗試SSH
- 21. 嘗試創建表的DbContext
- 22. UILabel textRectForBounds在嘗試創建保證金時沒有效果
- 23. 運行rebuild_index時沒有創建索引
- 24. 構建成功,但嘗試運行程序時出現GLEW錯誤
- 25. 在運行時創建成員的類
- 26. EF6,SQLite將無法運行沒有App.confg
- 27. 在運行時更改源代碼自動完成
- 28. 自動完成和jquery選擇器在運行時更改
- 29. Qt QSettings嘗試創建ini文件,但沒有創建爲什麼?
- 30. Powershell在腳本運行時沒有創建註冊表鍵
聽起來像您的遷移可能不同步。您可以找到試圖創建「City」表的遷移,並將現有表的所有代碼註釋掉,並將其應用於update-database,或者您可以創建新的基線遷移(Add-Migration InitialCreate -IgnoreChanges)https ://msdn.microsoft.com/en-us/data/dn579398.aspx#option1 –
我在下面的評論中看到您有一個單獨的身份上下文。確保您的目標是正確的遷移上下文(-ContextTypeName)或使您的應用上下文從IdentityDbContext繼承。 –
是的,我已經雙倍和三倍檢查。問題是我沒有在'DbMigrationsConfiguration'中設置屬性'MigrationsNamespace',導致另一個'DbContext'被錯誤的遷移所遷移。 – ax1mx2