2011-09-30 9 views
6

Estoy utilizando Entity Framework con código primero con una fuente de datos MySQL.Entity Framework Insertar datos iniciales al reconstruir

he definido ContactType.cs de la siguiente manera:

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

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

Mi pregunta es, después de reconstruir la base de datos, ¿cómo puedo tener EF para insertar (sin SQL) algunos tipos de contacto en la base de datos. Normalmente, la base de datos se reconstruye como un esquema en blanco, pero me gustaría agregar tipos de contacto como (Casa, Móvil, Oficina, Fax).

Respuesta

15

Se crea un inicializador base de datos personalizada y sobrescribir el método 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 
    } 
} 

A continuación, se ha registrado esta inicializador para su contexto derivado MyContext:

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

Este es un método estático de la clase Database y debería llamarse a alguna parte al inicio de la aplicación. También se puede poner en un constructor estático de su contexto para asegurarse de que el intializer se establece antes de crear la primera instancia de contexto:

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

En lugar de la inicialización de base DropCreateDatabaseIfModelChanges<T> también se puede derivar de DropCreateDatabaseAlways<T> o CreateDatabaseIfNotExists<T> si que mejor se adapte a tus necesidades