2012-06-05 32 views
4

我試圖抓住Code First,至今每次我對模型進行更改時,都需要刪除並重新創建數據庫。那麼當前數據庫中的數據呢?我只是覺得很煩人,我必須每次都這樣做,並且不會創建一個好的網絡方法,除非您100%確定不需要進行更改,例如在表中添加新列。是否有另一種方法來防止這種情況發生?EF代碼首先需要對模型進行更改,任何方式不必刪除數據庫?

回答

1

默認情況下,數據庫初始值設定爲DropCreateDatabaseIfModelChnages。您可以設置數據庫初始化爲空,以避免重現,

Database.SetInitializer<YourContext>(null); 

另一種選擇是使用Database Migrations無需重新創建它來更新數據庫。

+0

對不起,在這裏我會加入這一行?另外,如果我將一個新屬性添加到模型中,它會將它添加到數據庫中並將其中的當前數據保留在其中嗎? –

+0

因爲你需要使用數據庫遷移。看我的編輯。 –

+0

好吧,我要讀這篇文章。謝謝。 –

1

如果您在開發過程中嘗試維護測試數據,請考慮使用IDatabaseInitializer的Seed方法(即您的數據庫初始值設定項)。 Seed方法在itialization期間被調用(在應用了任何模型更改之後),並將填充您指定的任何測試數據。

指定想要使用EF的初始化程序的最佳方法是在global.asax.cs文件中。

下面是一個例子:

[Global.asax.cs中]

Database.SetInitializer<MyApplicationDbContext>(new MyApplicationDbContextInitializer()); 

[MyApplicationDbContextInitializer.cs]

public class MyApplicationDbContextInitializer : DropCreateDatabaseAlways<MyApplicationDbContext> 
{ 
    protected override void Seed(TitleDB context) 
    { 

     context.Products.Add(new Product { Id = 1, Name = "Foobar XL" }); 
     context.Products.Add(new Product { Id = 2, Name = "Foobar LG" }); 
     context.Products.Add(new Product { Id = 3, Name = "Foobar MD" }); 

     context.SaveChanges(); 

     base.Seed(context); 
    } 
} 
相關問題