2011-09-30 83 views
6

我使用實體框架代碼優先與MySQL數據源。實體框架在重建時插入初始數據

我定義ContactType.cs如下:

public class ContactType 
{ 
    [Key] 
    public int ContactTypeId { get; set; } 

    [Required, StringLength(30)] 
    public string DisplayName { get; set; } 
} 

我的問題是,我重建數據庫後,我怎麼能有EF插入(不包括SQL)某些類型的接觸到數據庫中。通常情況下,數據庫被重建爲空白模式,但我想添加類似(家庭,移動,辦公室,傳真)的聯繫人類型。

回答

15

您創建一個自定義數據庫初始化,並覆蓋Seed方法

public class MyContextInitializer 
    : DropCreateDatabaseIfModelChanges<MyContext> 
{ 
    protected override void Seed(MyContext context) 
    { 
     context.ContactTypes.Add(new ContactType { DisplayName = "Home" }); 
     context.ContactTypes.Add(new ContactType { DisplayName = "Mobile" }); 
     context.ContactTypes.Add(new ContactType { DisplayName = "Office" }); 
     context.ContactTypes.Add(new ContactType { DisplayName = "Fax" }); 

     //EF will call SaveChanges itself 
    } 
} 

然後你註冊這個初始化爲您導出的上下文MyContext

Database.SetInitializer<MyContext>(new MyContextInitializer()); 

這是Database類的靜態方法應該在應用程序啓動時調用一次。你也可以把它放到你的上下文的靜態構造函數,以確保您創建的第一個上下文實例之前初始化器設置:

static MyContext() 
{ 
    Database.SetInitializer<MyContext>(new MyContextInitializer()); 
} 

不是基初始化DropCreateDatabaseIfModelChanges<T>您也可以從DropCreateDatabaseAlways<T>CreateDatabaseIfNotExists<T>,如果得到的更好地滿足您的需求。