2011-09-30 15 views
6

Używam kodu Entity Framework - najpierw ze źródłem danych MySQL.Entity Framework Wstawianie danych początkowych podczas przebudowy

Mam zdefiniowane ContactType.cs następująco:

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

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

Moje pytanie brzmi, po tym, jak odbudować bazę danych, jak mogę mieć EF wstawić (bez SQL) niektóre rodzaje kontaktu do bazy danych. Zwykle DB jest odbudowywany jako pusty schemat, ale chciałbym dodać typy kontaktów, takie jak (Dom, Komórka, Biuro, Faks).

Odpowiedz

15

utworzyć inicjator niestandardowej bazy danych i zastąpić metodę 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 
    } 
} 

Następnie należy zarejestrować ten inicjator dla kontekście uzyskanych MyContext:

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

To jest statyczna metoda klasy Database i powinien zostać wywołany gdzieś podczas uruchamiania aplikacji. Można także umieścić go w statycznym konstruktorze context, aby upewnić się, że intializer jest ustawiona przed utworzeniem pierwszej instancji kontekstowego:

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

Zamiast inicjatora bazowej DropCreateDatabaseIfModelChanges<T> można również wynikać z DropCreateDatabaseAlways<T> lub CreateDatabaseIfNotExists<T> jeżeli to lepiej spełnia twoje potrzeby.