Aktualisieren von getrennten Entitäten mit Viele-zu-Viele-Beziehungen

8

Angenommen, ich habe die folgenden Modellklassen in einem Entity Framework Code-First-Setup:

%Vor%

Die aus diesem Code erstellte Datenbank enthält eine TeamPersons-Tabelle, die die Viele-zu-Viele-Beziehung zwischen Personen und Teams darstellt.

Angenommen, ich habe ein getrenntes Person-Objekt (kein Proxy und noch keinem Kontext zugeordnet), dessen Team-Sammlung ein oder mehrere getrennte Team-Objekte enthält, die alle Teams repräsentieren, die sich bereits in der Datenbank befinden. Ein Objekt wie es im folgenden Beispiel entstehen würde, wenn in der db bereits eine Person mit der Id 1 und ein Team mit der Id 3 existiert:

%Vor%

Was ist der beste Weg, um dieses Objekt zu aktualisieren, so dass die TeamPersons-Tabelle nach dem Update eine einzelne Zeile für Bob enthält, die ihn mit C Team verbindet? Ich habe das Offensichtliche versucht:

%Vor%

aber die Teams-Sammlung wird einfach ignoriert. Ich habe auch verschiedene andere Dinge ausprobiert, aber nichts scheint genau das zu tun, wonach ich hier bin. Danke für jede Hilfe.

BEARBEITEN:

So bekomme ich, dass ich sowohl die Person als auch das Team [s] aus der db holen, sie aktualisieren und dann Änderungen festschreiben kann:

%Vor%

Das ist ein Schmerz, wenn die Person eine komplizierte Entität ist. Ich weiß, dass ich Automapper oder etwas verwenden könnte, um die Dinge ein wenig einfacher zu machen, aber dennoch scheint es eine Schande, wenn es keine Möglichkeit gibt, das ursprüngliche Personenobjekt zu speichern, anstatt ein neues zu bekommen und alle Eigenschaften zu kopieren / p>     

Duncan 15.11.2012, 20:36
quelle

4 Antworten

1

Der allgemeine Ansatz besteht darin, die Team von der Datenbank und Add für die Person Sammlung zu holen. Das Festlegen von Teams wirkt sich nur auf Skalareigenschaften und nicht auf Navigationseigenschaften aus.

    
Gert Arnold 15.11.2012 20:55
quelle
0

Wählen Sie zuerst die vorhandenen Entitäten aus, und fügen Sie dann das Team der Teamkollektion des Personenobjekts hinzu.

So etwas wie: (Syntax ist möglicherweise nicht genau richtig)

%Vor%     
EkoostikMartin 15.11.2012 20:56
quelle
0

Das ist, wo EF s ** ks ist. sehr ineffizient für ein getrenntes Szenario. Laden von Daten für das Update / Löschen und jedes für das erneute Anhängen aktualisiert, kann nicht nur die aktualisierte Entität an den Kontext als eine Entität mit dem gleichen Schlüssel möglicherweise bereits im Kontext bereits vorhanden, in diesem Fall, EF wird nur kotzen. Es muss geprüft werden, ob sich eine Entität mit demselben Schlüssel bereits im Kontext befindet und entsprechend angehängt oder aktualisiert wird. Es ist schlimmer, Entity mit vielen bis vielen Beziehungskindern zu aktualisieren. Das Entfernen des gelöschten Kinds stammt vom Entitätsset des Kindes, aber nicht von der Referenzeigenschaft, es ist sehr unordentlich.

    
koo9 30.10.2014 16:35
quelle
0

Sie können die Attach-Methode verwenden. Versuchen Sie Folgendes:

%Vor%

Ich habe diesen Code nicht getestet, lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben

    
Boies Ioan 25.02.2015 08:07
quelle