2011-09-30 14 views
6

Sto utilizzando Entity Framework in codice prima con un'origine dati MySQL.Entity Framework Inserimento dati iniziali su Ricostruzione

ho definito ContactType.cs come segue:

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

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

La mia domanda è, dopo che ho ricostruire il database, come posso avere EF inserire (senza SQL) alcuni tipi di contatto nel database. Normalmente, il DB viene ricostruito come uno schema vuoto, ma mi piacerebbe aggiungere tipi di contatto come (Home, Mobile, Office, Fax).

risposta

15

Si crea un inizializzatore database personalizzato e sovrascrivere il metodo 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 
    } 
} 

Poi registrare questo inizializzatore per il contesto derivato MyContext:

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

Questo è un metodo statico della classe Database e dovrebbe essere chiamato da qualche parte una volta all'avvio dell'applicazione. Si può anche mettere in un costruttore statico del vostro contesto per assicurarsi che l'intializer sia impostato prima di creare la prima istanza di contesto:

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

Invece di dell'inizializzatore di base DropCreateDatabaseIfModelChanges<T> si può anche derivare da DropCreateDatabaseAlways<T> o CreateDatabaseIfNotExists<T> se che soddisfa meglio le tue esigenze.

Problemi correlati