2013-05-10 80 views
4

我看到很多使用Code First進行種子播種的例子,但我不確定我是否理解使用EF Database First時播種數據庫的慣用方式。如何使用實體框架數據庫第一種方法爲數據創建數據?

+0

數據庫首先是當你已經擁有數據庫並且你想用它來創建你的模型。在這種情況下,您最有可能擁有數據庫中的數據。你也不希望/不能刪除數據庫。我想知道如果您已經有數據,您想要爲數據庫創建種子的場景是什麼。無論如何 - 您可以使用sql腳本添加數據,也可以創建上下文,創建實體將其添加到上下文並保存更改。既然你不刪除數據庫,你可能只想做一次。 – Pawel 2013-05-11 04:55:50

+0

在db中,首先可以用你喜歡的任何方式創建/播種數據庫。英孚在這裏是一個完全的外人。 – 2013-05-11 10:16:27

回答

0

最佳實踐是非常情況依賴。然後是DEV與PROD環境。 在使用Drop時使用自動種子並在DEV期間在模型更改時重新創建,因此您有測試數據最有意義。這是最常用的時候。

因爲您可以擁有手動觸發的測試方法。我個人發現這個想法是一種自動觸發的種子方法,當數據庫結構不穩定時,這種想法並不令人興奮,對於DEV原型設計更是如此。在使用遷移時,您傾向於保留您辛苦獲得的測試數據。有些在PROD的初始安裝過程中使用Seeding。其他人將在安裝/調試過程中觸發特定的負載例程。我喜歡使用自定義加載例程。

編輯:代碼第一個示例。使用數據庫首先,您只需正常寫入數據庫。

// select the appropriate initializer for your situation eg 
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, MyMigrationConfiguration>()); 
Context.Database.Initialize(true); // yes now please 
//... 
public class MyMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext> 
    where TContext : DbContext{ 

    public MyMigrationConfiguration() { 
     AutomaticMigrationsEnabled = true; //fyi options 
     AutomaticMigrationDataLossAllowed = true; //fyi options 
    } 
    public override void Seed(TContext context) 
    { 
     base.Seed(context); 
// SEED AWAY..... you have the context 
    } 

} 
+3

這看起來不像數據庫第一。 DB First首先不支持遷移。 – Pawel 2013-05-11 04:51:32

+0

沒有它的代碼第一。抱歉。種子過程首先與代碼一起進行。在DB中,建模過程的STOP代碼如下,以防止進程啓動。我現在好奇DB先和播種。顯然是空數據庫然後。所以原來的評論仍然有效。從數據庫第一次開始,只是樣本不相關 – 2013-05-11 05:05:30

相關問題