2011-04-19 18 views
6

He estado usando Código EF Primera CTP5 con las clases de mapa específico para cada entidad, así:EF 4.1 RTM - EntityTypeConfiguration

public class UserMapping : EntityTypeConfiguration<User> 
{ 
    public UserMapping() 
    { 
     ToTable("Users"); 

     HasKey(t => t.ID); 
     Property(t => t.ID).HasColumnName("user_id"); 

     Property(t => t.Name).HasColumnName("name"); 
    } 
} 

Y si las carga el camino Jonas Cannehag describe aquí: http://areaofinterest.wordpress.com/2010/12/08/dynamically-load-entity-configurations-in-ef-codefirst-ctp5/

Pero eso no funciona en RTM y no he podido descifrar cómo usar las clases de mapeo dedicado. ¿Tienes? :-)

Respuesta

16
public class DataContext : DbContext 
{ 
    ... 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Configurations.Add(new UserMapping());  
      base.OnModelCreating(modelBuilder); 
    } 
} 

versión dinámica (probablemente debería probar extensa antes de poner en producción)

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
      var typesToRegister = 
       Assembly.GetExecutingAssembly().GetTypes().Where(
        type => 
        type.BaseType.IsGenericType && 
        type.BaseType.GetGenericTypeDefinition() == typeof (EntityTypeConfiguration<>)); 

      foreach (object configurationInstance in typesToRegister.Select(Activator.CreateInstance)) 
      { 
       modelBuilder.Configurations.Add((dynamic) configurationInstance); 
      } 

      base.OnModelCreating(modelBuilder); 
     } 
+0

no se ve demasiado dinámico para mí. –

+0

Lo que Ladislav dijo :-) –

+0

La actualización supone que sus asignaciones están en el mismo ensamblaje que DbContext y el ensamblado * Executing *. De lo contrario, puede agregar/eliminar cláusulas Where. – mxmissile

Cuestiones relacionadas