Entity Framework 4.1 codice prima mappatura di tabelle che hanno la loro chiave primaria come la colonna chiave esterna

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

Domanda

Ho un database esistente che sto utilizzando Entity Framework Codice primo a mappare. La convenzione di denominazione per le colonne è strano, così ho deciso di mappare le proprietà di entità manualmente, e fino ad ora questo è stato bene.

Lo schema per il database è abbastanza strano per me e non è sicuramente come avrei fatto. Purtroppo, mi sono bloccato con essa per il momento.

In sostanza v'è una sola chiave primaria (AccountNumber) condivisa da un certo numero di tavoli che creano una serie di relazioni uno-a-uno. Tuttavia, la chiave primaria è anche la colonna di chiave esterna. Ecco ciò che i miei soggetti sembrano (con un sacco di proprietà rimosse per semplicità). Ho incluso solo due entità per rendere più 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; }
}

Le due entità condividono la stessa chiave primaria. Ho creato classi di configurazione per fare la mappatura in questo modo:

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 mappatura chiave esterna viene eseguita solo su un lato. Questo appare come avrebbe funzionato se non fosse per il fatto che la colonna chiave esterna è anche la chiave primaria della tabella. Quando si tenta di eseguire una query, ottengo l'errore:

(256,6): l'errore 0019: ogni nome di proprietà in un tipo deve essere univoco. Nome proprietà 'am_l_acct' è già stato definito.

Purtroppo, non posso tirare la mappatura per la proprietà AccountNumber fuori del soggetto Indirizzo perché è la chiave primaria.

C'è un modo per realizzare questa mappatura, o è impossibile?

È stato utile?

Soluzione

Removet questo Map(x => x.MapKey("am_l_acct")) dalla mappatura Customer. Questa mappatura viene utilizzato solo se si mappa desidera definire colonna FK nel database e non si dispone di proprietà FK nella classe, ma lo avete - è chiave primaria nell'entità Address. Se si tenta di mappare FK quel modo EF pensa che si sta tentando di creare per colonne con lo stesso nome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top