2013-03-01 49 views
35

我正在使用Entity Framework v4。我遵循了Nerd Dinner tutorial中的說明。我目前處於開發模式(沒有發佈到任何更高級的環境),並希望在每個新部署中重新創建表,因爲模型仍然非常易變,我不在意保留數據。但是,這不會發生。表格不會被創建/修改,或者任何發生在數據庫中的事情。如果我使用包管理器命令遷移到遷移模型:enable-migrations,add-migration(初始),這可以工作並使用我的遷移。但是,由於我不想進行粒度遷移,只想要我的初始創建腳本,所以我不得不刪除遷移文件夾,每次都要重新執行命令(enable-migrations,add-migration)並手動刪除數據庫我改變了一切。如何在Code First Drop-Create模式下使用實體框架?

如何首先發生代碼的拖放/創建行爲?

回答

50

使用DropCreateDatabaseAlways初始化程序爲您的數據庫。

Database.SetInitializer(new DropCreateDatabaseAlways<YourContextName>()); 

其實,如果你想種子數據庫,然後創建自己的初始化,將從DropCreateDatabaseAlways繼承:

public class MyInitializer : DropCreateDatabaseAlways<YourContextName> 
{ 
    protected override void Seed(MagnateContext context) 
    { 
     // seed database here 
    } 
} 

在應用領域方面的首次使用過程中,它會永遠重建數據庫和上下文

Database.SetInitializer(new MyInitializer()); 
+1

這隻適用於數據庫不存在的情況。如果數據庫存在,並且我對模型進行了更改,則不會有任何反應。 另外,語法是: Database.SetInitializer(new DropCreateDatabaseAlways ()); – 2013-03-01 17:05:18

+1

@RyanLangton不會,它會下降並創建數據庫 – 2013-03-01 17:05:59

+2

其實,你是對的。但是直到我在應用程序中執行查詢時才發生。如果我剛啓動應用程序,則什麼都不會發生。有趣的行爲。 – 2013-03-01 17:08:10

0

如果數據庫已經存在,第一次使用前設置它,你想改變你的模型,你可以使用DropCreateDatabaseIfModelChanges<YourContextName>

相關問題