2011-01-11 14 views
7

Tengo dos ENTIDADES:Entity framework (CTP5, Fluent API). Cambiar el nombre de la columna de propiedad de navegación

public class Address 
{ 
     public int Id { get; set; } 
public string FirstName { get; set; 
public string LastName { get; set; } 
} 

public partial class Customer 
    { 
     public int Id { get; set; } 
     public string Email { get; set; } 
     public string Username { get; set; } 

     public virtual Address BillingAddress { get; set; } 
     public virtual Address ShippingAddress { get; set; } 
    } 

A continuación se presentan mapeo de clases:

public partial class AddressMap : EntityTypeConfiguration<Address> 
    { 
     public AddressMap() 
     { 
      this.ToTable("Addresses"); 
      this.HasKey(a => a.Id); 
     } 
    } 
public partial class CustomerMap : EntityTypeConfiguration<Customer> 
    { 
     public CustomerMap() 
     { 
      this.ToTable("Customer"); 
      this.HasKey(c => c.Id); 

      this.HasOptional<Address>(c => c.BillingAddress); 
      this.HasOptional<Address>(c => c.ShippingAddress); 
     } 
    } 

Cuando se genera la base de datos, mi mesa 'Cliente' tiene dos columnas para 'BillingAddress' y ' Las propiedades de ShippingAddress '. Sus nombres son 'AddressId' y 'AddressId1'. Pregunta: ¿cómo puedo cambiarles el nombre a 'BillingAddressId' y 'ShippingAddressId'?

Respuesta

4

Básicamente desea personalizar el nombre de columna FK en una asociación independiente y este código va a hacer esto para usted:

public CustomerMap() 
{ 
    this.ToTable("Customer");    

    this.HasOptional<Address>(c => c.BillingAddress) 
     .WithMany() 
     .IsIndependent().Map(m => 
     { 
      m.MapKey(a => a.Id, "BillingAddressId");      
     }); 

    this.HasOptional<Address>(c => c.ShippingAddress) 
     .WithMany() 
     .IsIndependent().Map(m => 
     { 
      m.MapKey(a => a.Id, "ShippingAddressId"); 
     });    
} 

alt text

+0

Morteza, gracias de nuevo. –

+0

He realizado los cambios que sugirió. Pero en mi publicación inicial simplifiqué el modelo. Mi clase de cliente tiene una propiedad más que contiene una lista de todas las direcciones: "public virtual ICollection

Addresses {get; set;}". Y la clase de configuración del cliente (CustomerMap) tiene una línea más: "this.HasMany
(c => c.Addresses) .WithMany(). Map (m => m.ToTable (" CustomerAddresses "));" Ahora recibo el siguiente error: "La secuencia contiene más de un elemento coincidente". ¿Alguna idea? –

+0

No hay problema. He copiado y pegado sus códigos adicionales y funcionó perfectamente para mí al crear una nueva asociación de muchos a muchos entre Cliente y Dirección, por lo que no puedo reproducir su excepción. ¿Puede publicar su modelo de objeto completo y el código de cliente? –

Cuestiones relacionadas