2011-01-11 3 views
7

J'ai deux ENTITES:Cadre d'entité (CTP5, API Fluent). Renommer la colonne de la propriété de navigation

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; } 
    } 

Ci-dessous sont des classes mapping:

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); 
     } 
    } 

Lorsque la base de données est générée, ma table 'client' a deux colonnes pour 'billingAddress' et ' Propriétés de ShippingAddress. Leurs noms sont 'AddressId' et 'AddressId1'. Question: comment puis-je les renommer en 'BillingAddressId' et 'ShippingAddressId'?

Répondre

4

Fondamentalement, vous voulez personnaliser le nom de colonne FK dans une association indépendante et ce code va le faire pour vous:

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, merci encore. –

+0

J'ai fait les changements que vous avez suggérés. Mais dans mon message initial, j'ai simplifié le modèle. Ma classe de client a une propriété supplémentaire contenant une liste de toutes les adresses: "public virtual ICollection

Addresses {get; set;}". Et la classe de configuration client (CustomerMap) a une autre ligne: "this.HasMany
(c => c.Addresses) .WithMany(). Map (m => m.ToTable (" CustomerAddresses "));" Maintenant, j'obtiens l'erreur suivante: "La séquence contient plus d'un élément correspondant". Des pensées? –

+0

Pas de problème. J'ai copié et collé vos codes supplémentaires et cela a parfaitement fonctionné pour moi en créant une nouvelle association plusieurs-à-plusieurs entre le client et l'adresse, donc je ne peux pas reproduire votre exception. Pouvez-vous s'il vous plaît poster votre modèle d'objet complet et le code client? –

Questions connexes