Entity Framework 4.1 Code du premier mappage des tableaux qui ont leur clé primaire comme la colonne de clé étrangère

StackOverflow https://stackoverflow.com/questions/9300171

Question

J'ai une base de données existante que j'utilise le code Entity Framework Première à la carte. La convention de nommage pour les colonnes est impair, alors j'ai décidé je mapper des propriétés de l'entité manuellement, et jusqu'à présent cela a été très bien.

Le schéma de la base de données est assez étrange pour moi et certainement pas la façon dont je l'aurais fait. Malheureusement, je suis coincé avec elle pour l'instant.

Fondamentalement, il existe une seule clé primaire (AccountNumber) partagée par un certain nombre de tables créant un groupe d'un à-un. Cependant, la clé primaire est la colonne clé étrangère. Voici ce que mes entités ressemblent (avec un tas de propriétés tout enlevé pour la simplicité). Je n'ai inclus deux entités pour le rendre facile.

public class Customer
{
    public int AccountNumber { get; set; }
    public String PhoneNumber { get; set; }
    ...
    public virtual Address Address { get; set; }
}

public class Address
{
    public int AccountNumber { get; set; }
    public String Name { get; set; }
    public String Address1 { get; set; }
    public String City { get; set; }
    ...
    public virtual Customer Customer { get; set; }
}

Les deux entités partagent la même clé primaire. J'ai créé des classes de configuration pour faire la mise en correspondance comme ceci:

public class CustomerConfiguration : EntityTypeConfiguration<Customer>
{
    public CustomerConfiguration()
        : base()
    {
        HasKey(p => p.AccountNumber);
        Property(p => p.AccountNumber).
            HasColumnName("cm_l_acct").
            IsRequired();
        Property(p => p.PhoneNumber).
            HasColumnName("cm_s_phonenumber");

        HasRequired(x => x.Address).
            WithRequiredPrincipal(x => x.Customer).
            Map(x => x.MapKey("am_l_acct"));
    }
}
public class AddressConfiguration : EntityTypeConfiguration<Address>
{
    public AddressConfiguration()
        : base()
    {
        HasKey(p => p.AccountNumber);
        Property(p => p.AccountNumber).
            HasColumnName("am_l_acct").
            IsRequired();

        ...
    }
}

La cartographie clé étrangère se fait uniquement sur un côté. Cela apparaît comme cela fonctionnerait sinon le fait que la colonne de clé étrangère est aussi la clé primaire de la table. Lorsque je tente d'exécuter une requête, je reçois l'erreur:

(256,6): erreur 0019: Chaque nom de la propriété dans un type doit être unique. était déjà défini le nom de la propriété 'am_l_acct'.

Malheureusement, je ne peux pas tirer le mappage pour la propriété AccountNumber hors de l'entité Adresse, car il est la clé primaire.

Est-il possible que je peux accomplir ce mapping, ou est-il impossible?

Était-ce utile?

La solution

Removet cette Map(x => x.MapKey("am_l_acct")) de votre cartographie Customer. Cette cartographie est utilisée que si vous associez souhaitez définir la colonne FK dans la base de données et vous n'avez pas la propriété FK dans la classe, mais vous l'avez - il est la clé primaire dans l'entité Address. Si vous essayez de mapper FK cette façon EF pense que vous essayez de créer des colonnes avec le même nom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top