2011-09-30 17 views
6

Entity Framework kod ilkini bir MySQL veri kaynağıyla kullanıyorum. aşağıdaki gibi ben ContactType.cs tanımladığınızEntity Framework İlk Verilerin Eklenmesi Yeniden Oluşturma

: Ben veritabanını yeniden sonra

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

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

Sorum, ben nasıl EF (SQL olmadan) eklemek için bir veritabanına bazı iletişim türleri. Normal olarak, DB boş bir şema olarak yeniden oluşturulur, ancak (Ev, Mobil, Ofis, Faks) gibi kişi türlerini eklemek isterim.

cevap

15

Sen

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 
    } 
} 

Sonra türetilmiş bağlamda MyContext için bu başlatıcı kayıt Seed yöntemi özel bir veritabanı başlatıcı oluşturmak ve yaz: Bu Database sınıfın statik bir yöntemdir

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

ve Uygulama başlangıcında bir yerlerde bir kez çağrılmalıdır. Ayrıca ilk bağlam örneğini oluşturmadan önce intializer ayarlandığından emin olmak için bağlamın statik yapıcı içine koyabilirsiniz:

Bunun yerine de DropCreateDatabaseAlways<T> veya CreateDatabaseIfNotExists<T> eğer türetebileceğimiz taban başlatıcısı DropCreateDatabaseIfModelChanges<T> ait
static MyContext() 
{ 
    Database.SetInitializer<MyContext>(new MyContextInitializer()); 
} 

ihtiyaçlarınızı daha iyi karşılar.