使用Fluent API首先使用代碼創建數據庫。遷移已啓用,init文件位於遷移文件夾中。現在我們需要刪除數據庫並用新的定義(映射,所需實體等)重新創建它。我是否需要刪除遷移文件夾或一些遷移文件以再次創建數據庫?我不確定遷移的init文件是否對Fluent API的OnModelCreating方法有任何影響。我厭倦了在StackOverflow上找到答案,並且還在Entity Framework Tutorial 之上,但我仍然不確定。有人可以解釋我將如何使用我的場景創建數據庫嗎?實體框架6重新創建數據庫
回答
關鍵在Initializer類中。在我的情況:
這裏我類擴展CreateDatabaseIfNotExists
,但你會想,如果我理解正確的話,DropCreateDatabaseIfModelChanges
。因此,它應該是這樣的:
public class PricedNotesInitializer:DropCreateDatabaseIfModelChanges<PricedNotesContext>
{
protected override void Seed(PricedNotesContext context)
{
}
}
當你做
Add-Migration NewMigrationName
然後EF會自動生成的代碼作爲遷移文件夾遷移之後會發生什麼。
要應用的遷移,只需鍵入
Update-Database
完成!您在OnModelCreating
中所做的任何更改都將反映在遷移中(如更改密鑰,精度等)。此外,由於我們指定了DropCreateDatabaseIfModelChanges
,所以使用該Seed方法編寫的任何內容都將被執行並且您的數據庫將被重新創建。
希望這會有所幫助。
我的觀點是創建數據庫就像當前不存在的數據庫一樣,因此創建一個新的連接字符串 - 爲同一個項目創建2個數據庫(當然只使用一個),我們只想嘗試哪個更適合應用程序。這就是爲什麼我不知道我是否應該刪除遷移文件的原因。所以也許更好的問題是當我想創建新的數據庫時,我是否需要刪除遷移? – Mony
沒有。如果您只是將連接字符串更改爲指向新數據庫,則可以運行「更新數據庫」,並且將應用所有這些遷移。它將具有與當前數據庫完全相同的架構。那有意義嗎?你不需要刪除任何東西。 – coolboyjules
感謝您的解釋,但是我在你寫評論之前做了修改,並刪除了usman鏈接中建議的所有遷移文件,DB不一樣,因爲模型的改變,也歸功於你的文章,我搜索了一點點,最終發現了意思'init'和'''migrations'和''OnModelCreating'方法的配置文件方法 – Mony
- 1. 實體框架6 - 更新數據庫
- 2. 重新創建實體框架表,而不是數據庫?
- 3. 實體框架6不創建數據庫
- 4. 未創建實體框架數據庫
- 5. 實體框架不創建數據庫
- 6. 實體框架不創建數據庫
- 7. 實體框架6更新數據庫無法使用-IgnoreChanges創建的遷移
- 8. 實體框架重新創建POCO類
- 9. 如何在實體框架數據庫創建後重命名實體框架數據庫?
- 10. 實體框架創建重複實體
- 11. 如何使用實體框架刪除並重新創建數據庫?
- 12. 實體框架,數據庫
- 13. ADO.NET實體框架 - 輕鬆重新創建實體類?
- 14. 實體框架6:創建具有多個上下文的數據庫
- 15. 實體框架6:數據操作
- 16. WinForms數據綁定實體框架6
- 17. 實體框架6和空間數據
- 18. 實體框架6
- 19. 實體框架創建最新的IQueryable
- 20. 實體框架創建新表
- 21. 實體框架重新添加現有數據庫對象
- 22. 實體框架(數據庫優先) - 重新生成代碼
- 23. 實體框架增加了重複實體數據庫
- 24. 實體框架不保存/停止重建數據庫
- 25. 實體框架插入多對多創建重複數據
- 26. 實體框架與長列名創建數據庫
- 27. 實體框架不會在App_Data中創建數據庫
- 28. 由實體框架自動創建的數據庫的位置
- 29. 實體框架未創建數據庫或表
- 30. 使用實體框架在數據庫中創建表
我想在這裏你可以找到你的答案[Here](http://stackoverflow.com/a/16082497/4154016) –
我用這個教程一年或兩年後,真的很喜歡它,除了無論出於什麼原因,我認爲自定義初始化程序的配置文件設置將不起作用。無論如何,初始化器的部分在這裏:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx。我的問題在這裏:http://stackoverflow.com/questions/32384662/set-databaseinitializerfortype-in-config-file-for-custom-initializer-to-fire。基本上我想定義一個不同於產品環境的'開發'環境的再種植。 – djangojazz
如果您正在使用遷移並希望執行自定義播種方法,我也經歷了這種痛苦。問題在於模型改變了「數據丟失」的概念。你不應該刪除你的遷移,因爲他們都會留下,除非你想'空白石板'的一切,並重新開始。您首先應該問自己的問題是:「我是否首先啓用遷移以查看模式歷史記錄?」如果答案是否定的,甚至不要沿着這條路線走。 http://stackoverflow.com/questions/33446327/seeding-data-will-not-work-when-schema-changes-with-code-first-when-using-migrat – djangojazz