Entity Framework 4.1 Code First Mapping zu Tabellen, die ihren Hauptschlüssel als Fremdschlüsselspalte haben

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

Frage

Ich habe eine vorhandene Datenbank, die ich zuerst den Entitäts -Framework -Code zum Zuordnen verwende. Die Namenskonvention für Spalten ist seltsam, daher habe ich beschlossen, Entitätseigenschaften manuell zu kartieren, und bis jetzt war dies in Ordnung.

Das Schema für die Datenbank ist mir ziemlich seltsam und ist definitiv nicht so, wie ich es getan hätte. Leider bin ich vorerst daran festgefahren.

Grundsätzlich gibt es einen einzelnen Primärschlüssel (AccountNumber), der von einer Reihe von Tabellen geteilt wird, die eine Reihe von Eins-zu-Eins-Beziehungen erstellen. Der Primärschlüssel ist jedoch auch die Spalte Fremdschlüssel. So sehen meine Entitäten aus (mit einer ganzen Reihe von Eigenschaften, die zum Einfachheit halber entfernt wurden). Ich habe nur zwei Einheiten aufgenommen, um es einfach zu machen .:

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

Die beiden Einheiten teilen den gleichen Primärschlüssel. Ich habe Konfigurationsklassen erstellt, um die Zuordnung wie folgt durchzuführen:

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

        ...
    }
}

Die Fremdschlüssel -Mapping erfolgt nur auf einer Seite. Dies scheint, als würde es funktionieren, wenn nicht die Tatsache, dass die Spalte für die Fremdschlüssel auch der Hauptschlüssel der Tabelle ist. Wenn ich versuche, eine Abfrage auszuführen, erhalte ich den Fehler:

(256,6): Fehler 0019: Jeder Eigenschaftsname in einem Typ muss eindeutig sein. Eigenschaftsname 'AM_L_ACCT' wurde bereits definiert.

Leider kann ich die Zuordnung für die AccountNumber -Eigenschaft nicht aus der Adressentität abziehen, da es sich um den Hauptschlüssel handelt.

Gibt es eine Möglichkeit, diese Kartierung zu erreichen, oder ist sie unmöglich?

War es hilfreich?

Lösung

Entfernen Sie das Map(x => x.MapKey("am_l_acct")) von deiner Customer Kartierung. Diese Zuordnung wird nur verwendet, wenn Sie die FK -Spalte in der Datenbank definieren möchten, und Sie haben keine FK -Eigenschaft in der Klasse, aber Sie haben sie - sie ist der Hauptschlüssel in der Address Einheit. Wenn Sie versuchen, FK auf diese Weise zuzuordnen, glaubt EF, dass Sie versuchen, Spalten mit demselben Namen zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top