2011-09-30 8 views
6

私は、Entity Frameworkを最初にMySQLデータソースで使用しています。エンティティフレームワークリビルド時に初期データを挿入

次のように私はContactType.csを定義した:

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

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

私の質問は、私はデータベースに(SQLなし)いくつかの接点タイプを挿入するためにEFを持つことができますどのように、私はデータベースを再構築した後、あります。通常、DBは空のスキーマとして再構築されますが、(Home、Mobile、Office、Fax)のような連絡先タイプを追加したいと思います。

答えて

15

あなたは

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ため、この初期化子を登録Seed方法をカスタムデータベースの初期化子を作成し、上書き:これはDatabaseクラスの静的メソッドである

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

とアプリケーション起動時にどこかで呼び出されるべきです。また、あなたが最初のコンテキスト・インスタンスを作成する前に初期化子が設定されていることを確認するためにあなたの文脈の静的コンストラクタにそれを置くことができます。

代わりにあなたも DropCreateDatabaseAlways<T>または CreateDatabaseIfNotExists<T>場合から派生することができ、ベース初期化子 DropCreateDatabaseIfModelChanges<T>
static MyContext() 
{ 
    Database.SetInitializer<MyContext>(new MyContextInitializer()); 
} 

あなたのニーズに一層合っています。

関連する問題