2011-03-16 14 views
11

Tengo un esquema de base de datos legado mal escrito con el que estoy trabajando a través de EF Code First. Actualmente estoy mapeando entidades de POCO y me gustaría crear un tipo complejo de "Dirección" y usar esto en todas partes donde se almacena la información de la dirección de la calle. Desafortunadamente, no todos los campos de dirección tienen el mismo nombre en la base de datos (es decir, una tabla puede tener "Dirección1" mientras que otra tabla tendrá "Calle1" aunque se refieran a lo mismo.Entidad marco 4 - mapeo de tipo complejo personalizado

¿Hay alguna manera? ??. para crear mapeos personalizados para un tipo complejo basado en una entidad determinada Lo que hace que la cartografía se parece a

+1

no utilice CTP5. Instale una nueva versión llamada 4.1 RC - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2dc5ddac-5a96-48b2-878d-b9f49d87569a&displaylang=en –

+0

Pensé que CTP5 era el "final"? ¿La nueva versión soluciona este problema? –

+0

No, los CTP nunca se consideran una versión final. Dicho esto, EF 4.1 RC parece ser una versión más de corrección de errores que un cambio fundamental sobre CTP5. –

Respuesta

14

Sí, se puede lograr que la API fluida He aquí un ejemplo:

public class User 
{ 
    public int UserId { get; set; } 
    public Address Address { get; set; } 
} 

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public Address Address { get; set; } 
} 

[ComplexType] 
public class Address 
{ 
    public string Street { get; set; }  
    public string City { get; set; } 
} 

public class Context : DbContext 
{  
    public DbSet<User> Users { get; set; } 
    public DbSet<Customer> Customers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    {  
     modelBuilder.Entity<User>().Property(u => u.Address.Street) 
            .HasColumnName("UserStreet"); 

     modelBuilder.Entity<Customer>().Property(u => u.Address.Street) 
             .HasColumnName("CustomerStreet");   
    } 
} 
+3

para mantenerse por completo dentro de FluentAPI, debe eliminar la anotación ComplexType y usar modelBuilder.ComplexType

(); ACTUALIZACIÓN: acabo de enviar una edición para hacer eso, ya que esta es una publicación anterior ... está pendiente –

Cuestiones relacionadas