In dieser Frage: Ef Many To Many kam eine Antwort auf, wie man manuell eine Verbindungstabelle spezifiziert. Aber ich habe eine leicht einzigartige Situation (die ich sicher nicht wirklich einzigartig bin).EF Fließende API Viele zu viele mit unterschiedlichen ID-Feldnamen
Meine zwei Tabellen haben jeweils ein Id-Feld. E.G .: [dbo].[Account].[Id]
und [dbo].[Person].[Id]
. Jede dieser Tabellen in meinem Code-First hat folgenden OnModelCreating:
modelBuilder.Entity<Account>.HasKey(x => x.Id);
modelBuilder.Entity<Person>.HasKey(x => x.Id);
Aber meine [dbo].[AccountsToPersons]...
Tabelle hat Felder z.B .: [AccountId]
und [PersonId]
Die AccountsToPersons Tabelle nicht von einer Klasse in Code dargestellt wird.
Ich habe offensichtlich bereits ein vorhandenes Modell, aber wir verwenden EF Code-First Fluent API anstelle der Aktualisierung des Modells aus der Datenbank.
Wie kann ich diesen Code ändern, damit er mit der Zuordnung verschiedener ID-Spaltennamen funktioniert?
public DbSet<Person> Persons { get; set; }
public DbSet<Account> Accounts { get; set; }
. . .
modelBuilder.Entity<Account>()
.HasMany(a => a.Persons)
.WithMany()
.Map(x =>
{
x.MapLeftKey("AccountId"); // <-- Account.Id to AccountsToPersons.AccountId??
x.MapRightKey("PersonId"); // <-- Person.Id to AccountsToPersons.PersonId??
x.ToTable("AccountsToPersons");
});
Wenn eine grundlegende Linq To EF Abfrage läuft (from x in context.Accounts select x).ToList();
, schlägt die Abfrage mit dem folgenden Fehler: "Ungültige Spaltenname 'person_id'"
Aber beim Ausführen der Abfrage (from x in context.Persons select x).ToList();
, bekomme ich keinen Fehler.
Anders als Grund getippt Spalten haben meine Modelle diese ihnen hinzugefügt:
// In my Account Model, I also have this property:
public IList<Person> Persons { get; set; }
// In my Person Model, I also have this property:
public IList<Account> Accounts { get; set; } // <-- in the Person model
bitte beachten Sie, dass, obwohl meine Konten Abfrage übergibt und Feldinformationen hat, die Persons
Feld immer null ist, auch wenn ich Bin mir sicher, dass es Links in meiner AccountsToPersons
Tabelle gibt.
Dies sieht aus wie Standard-EF-Benennung con Erfindung. Hast du das versucht? Funktioniert es?Wie sehen "Account" und "Person" aus? – Jasen
@Jasen Ich dachte, es funktioniert zuerst, obwohl mein Test nur beim Erstellen des Modells war. Ich habe meinen ersten LINQ ausgeführt und es ist mit den obigen Informationen fehlgeschlagen. – Suamere
Diese fließende Zuordnung sieht korrekt aus, wenn Ihre vorhandene Join-Tabelle die Spalten _AccountId_ und _PersonId_ enthält. Der Fehler liegt woanders. – Jasen