Ich bin neu bei EF 4 und das habe ich bisher gemacht:
Ich arbeite jetzt mit zwei Objekten, A und B. Objekt A hat eine Eigenschaft vom Typ B. In meinem WinForm habe ich eine Combo mit Objekten vom Typ B gefüllt. Wenn die Schaltfläche "Speichern" gedrückt wird, erscheint eine neue Instanz von Klasse A wird erstellt und alle Eigenschaften werden festgelegt. Die Eigenschaft des Objekts B wird wie folgt festgelegt:
%Vor%Dann erstelle ich ein Repository für ObjektA und rufe die Speichermethode auf. In dieser Speichermethode habe ich diesen Code ±
%Vor%Dieser Code speichert einen neuen Eintrag in der Datenbank, aber es erstellt auch einen neuen Datensatz für Objekt B! Ich will das nicht, denn Objekt B existiert bereits in der Datenbank! (Ich habe dieses aus der Combobox ausgewählt).
So fülle ich meine Combobox:
Im ObjektB-Repository:
%Vor%In meiner Form:
%Vor%Also meine Frage ist, was muss ich tun, um Objekt A zu speichern, ohne einen neuen Datensatz für Objekt B zu erstellen?
Wenn Sie objectB
nicht einfügen möchten, müssen Sie EF darüber informieren. Wenn Sie context.objectAs.AddObject(obj)
für objectA
aufrufen, sagen Sie: Ich möchte objectA und alle seine Abhängigkeiten einfügen . Aber natürlich wollen Sie keine Abhängigkeiten speichern, also müssen Sie entweder:
objectB
aus dem DB, bevor Sie es zu objectA
hinzufügen. In diesem Fall weiß EF, dass objectB
ein existierendes Objekt ist und es wird es nicht erneut einfügen. objectB
dem Kontext hinzu, bevor Sie es zu objectA
hinzufügen. ObjectB
wird als vorhanden, aber unverändert behandelt. objectB
den Status von objectA
fest. Sie können das tun, indem Sie Folgendes aufrufen: context.ObjectStateManager.ChangeObjectState(objectB, EntityState.Unchanged)
Beispiel für den ersten Vorschlag:
%Vor%Beispiel für den zweiten Vorschlag:
%Vor%Beispiel für den dritten Vorschlag:
%Vor%Ich nehme dieses Problem in der folgenden Reihe an:
%Vor% Wegen des Ergebnisses (objectB)cmbBObjects.selectedItem
losgelöst vom DataContext-Entity-Framework erstellen Sie eine neue Instanz. Stattdessen können Sie:
1.Abject objectB id zu objectA
zuweisen %Vor%2. Oder laden Sie objectB von dataContext und weisen Sie sie objectA zu:
%Vor%Probieren Sie einfach meine Vorschläge aus und kommen Sie mit Ergebnissen zurück, weil ich nicht genau weiß.
Hoffe diese Hilfe.
Tags und Links .net c# entity-framework entity-framework-4