2012-03-29 26 views
6

Tengo una entidad en el marco Código primera entidad que en la actualidad se ve así:Entity Framework - Reciclar Tipo Complejo

public class Entity 
{ 
    // snip ... 

    public string OriginalDepartment { get; set; } 
    public string OriginalQueue { get; set; } 

    public string CurrentDepartment { get; set; } 
    public string CurrentQueue { get; set; } 
} 

Me gustaría crear Tipo Complejo de este tipo como algo parecido a esto:

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

me gustaría utilizar este mismo tipo para ambos actual y original:

public Location Original { get; set; } 
public Location Current { get; set; } 

Es esto posible, o hago Necesito crear dos tipos complejos CurrentLocation y OriginalLocation?

public class OriginalLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class CurrentLocation 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

Respuesta

7

Compatible con la caja, no necesita crear dos tipos complejos.

También puede configurar los tipos complejos de forma explícita con el constructor de modelos

modelBuilder.ComplexType<Location>(); 

Para personalizar los nombres de columna, debe configurarlos desde la configuración entidad matriz

public class Location 
{ 
    public string Department { get; set; } 
    public string Queue { get; set; } 
} 

public class MyEntity 
{ 
    public int Id { get; set; } 
    public Location Original { get; set; } 
    public Location Current { get; set; } 
} 

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.ComplexType<Location>(); 

     modelBuilder.Entity<MyEntity>().Property(x => x.Current.Queue).HasColumnName("myCustomColumnName"); 
    } 
} 

Esto asociará MyEntity.Current.Queue-myCustomName columna

+0

Supongo que no estoy seguro de cómo se admite de inmediato. La clase 'ComplexTypeConfiguration ' tiene un método 'Property()' que me pide que especifique un nombre de columna. El nombre de la columna va a ser diferente para cada uno – Dismissile

+0

Supongo que debería aclarar que quiero poder personalizar los nombres de las columnas para ambos tipos complejos. ¿Eso es compatible? – Dismissile

+0

¿Desea que solo tengan un prefijo diferente o que se personalicen por completo? – archil