Entity Framework Code Zuerst viele bis viele doppelte Zeilen erstellen

8

Es stellte sich heraus, dass mein Problem zwei Kontext hat. Ich habe meinen Code ein wenig überarbeitet, um nur noch einen Kontext zu haben und mein Problem ist weg.

Ich habe einen Benutzer, der eine Liste von Benutzerkontakten hat, die selbst eine Kontaktoption haben. Es ist eine ziemlich einfache 1 zu viele, viele zu 1 mit der UserContact Tabelle in der Mitte.

Wenn ich den Benutzer aus der db heraushole und einen neuen UserContact erzeuge, aber die ContactOption auf ein existierendes Element (das ich aus der db gezogen habe) setze, erstellt Entity Framework beim Speichern von Änderungen eine neue ContactOption in der Datenbank, die im Wesentlichen ein Duplikat der Datei ist, die ich dem UserContact hinzugefügt habe (mit der Ausnahme, dass sie eine neue ID erhält).

Ich habe mehrere Stunden damit gekämpft und kann das nicht herausfinden. Irgendwelche Ideen?

Ich verwende ein Repository-Muster für meine Datenbankabfragen, aber ich habe sichergestellt, dass sie denselben Kontext verwenden.

Ich ziehe den Benutzer damit aus der Datenbank:

%Vor%

Und Kontaktoptionen werden herausgezogen mit:

%Vor%

Und ich füge die ContactOption wie folgt dem UserContact hinzu:

%Vor%

Mein Modell sieht so aus:

%Vor%     
Dan Morphis 13.11.2010, 19:16
quelle

2 Antworten

2

Ich habe Ihren Code ausgeführt und die genauen erwarteten Ergebnisse erhalten: Eine neue Zeile in der UserContacts -Tabelle mit der vorhandenen UserId und ContactOptionId, also bin ich mir nicht sicher, was da drin ist, aber Sie können es explizit versuchen Haben Sie FKs im UserContact-Objekt, so dass Sie die volle Kontrolle darüber haben, wie Code First Datensätze für Sie einfügt. Dazu müssen Sie UserContact wie folgt ändern:

%Vor%

Und dann können Sie Ihren Code wie folgt ändern:

%Vor%     
Morteza Manavi 14.11.2010, 01:17
quelle
1

Es stellte sich heraus, dass mein Problem zwei Kontext hat. Ich habe meinen Code ein wenig überarbeitet, um nur einen Kontext zu haben und mein Problem ging weg. Danke an Morteza Manavi, dass er mich in die richtige Richtung weist.

    
Dan Morphis 14.11.2010 14:21
quelle