0

使用Fluent API首先使用代碼創建數據庫。遷移已啓用,init文件位於遷移文件夾中。現在我們需要刪除數據庫並用新的定義(映射,所需實體等)重新創建它。我是否需要刪除遷移文件夾或一些遷移文件以再次創建數據庫?我不確定遷移的init文件是否對Fluent API的OnModelCreating方法有任何影響。我厭倦了在StackOverflow上找到答案,並且還在Entity Framework Tutorial 之上,但我仍然不確定。有人可以解釋我將如何使用我的場景創建數據庫嗎?實體框架6重新創建數據庫

+0

我想在這裏你可以找到你的答案[Here](http://stackoverflow.com/a/16082497/4154016) –

+0

我用這個教程一年或兩年後,真的很喜歡它,除了無論出於什麼原因,我認爲自定義初始化程序的配置文件設置將不起作用。無論如何,初始化器的部分在這裏: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

+0

如果您正在使用遷移並希望執行自定義播種方法,我也經歷了這種痛苦。問題在於模型改變了「數據丟失」的概念。你不應該刪除你的遷移,因爲他們都會留下,除非你想'空白石板'的一切,並重新開始。您首先應該問自己的問題是:「我是否首先啓用遷移以查看模式歷史記錄?」如果答案是否定的,甚至不要沿着這條路線走。 http://stackoverflow.com/questions/33446327/seeding-data-will-not-work-when-schema-changes-with-code-first-when-using-migrat – djangojazz

回答

1

關鍵在Initializer類中。在我的情況:

​​

這裏我類擴展CreateDatabaseIfNotExists,但你會想,如果我理解正確的話,DropCreateDatabaseIfModelChanges。因此,它應該是這樣的:

public class PricedNotesInitializer:DropCreateDatabaseIfModelChanges<PricedNotesContext> 
{ 

    protected override void Seed(PricedNotesContext context) 
    { 

    } 
} 

當你做

Add-Migration NewMigrationName 

然後EF會自動生成的代碼作爲遷移文件夾遷移之後會發生什麼。

要應用的遷移,只需鍵入

Update-Database 

完成!您在OnModelCreating中所做的任何更改都將反映在遷移中(如更改密鑰,精度等)。此外,由於我們指定了DropCreateDatabaseIfModelChanges,所以使用該Seed方法編寫的任何內容都將被執行並且您的數據庫將被重新創建。

希望這會有所幫助。

+0

我的觀點是創建數據庫就像當前不存在的數據庫一樣,因此創建一個新的連接字符串 - 爲同一個項目創建2個數據庫(當然只使用一個),我們只想嘗試哪個更適合應用程序。這就是爲什麼我不知道我是否應該刪除遷移文件的原因。所以也許更好的問題是當我想創建新的數據庫時,我是否需要刪除遷移? – Mony

+0

沒有。如果您只是將連接字符串更改爲指向新數據庫,則可以運行「更新數據庫」,並且將應用所有這些遷移。它將具有與當前數據庫完全相同的架構。那有意義嗎?你不需要刪除任何東西。 – coolboyjules

+0

感謝您的解釋,但是我在你寫評論之前做了修改,並刪除了usman鏈接中建議的所有遷移文件,DB不一樣,因爲模型的改變,也歸功於你的文章,我搜索了一點點,最終發現了意思'init'和'''migrations'和''OnModelCreating'方法的配置文件方法 – Mony