Entity Framework - Untergeordnete Entität hinzufügen

9

Entity Framework 5.0 Code zuerst mit vorhandener Datenbank. Reverse entwickelte die Klassen mit Elektrowerkzeugen. Alles funktioniert super. Die Datenbank hat zwei Tabellen. Ein Elternteil und ein Kind mit Fremdschlüssel zurück zur Eltern-ID. IDs sind alle int mit automatischem Inkrement. Ich habe mehrere übergeordnete Datensätze hinzugefügt und möchte jetzt untergeordnete Datensätze bestimmten übergeordneten Elementen hinzufügen. Der einzige Weg, den ich sehen kann, ist, die passende Eltern-ID zu finden, indem ich in der Eltern-Tabelle nach einem Namen oder einer anderen Eigenschaft suche und die ID zurückgebe. Verwenden Sie dann diese ID in der Fremdschlüsseleigenschaft, wenn Sie das Kind hinzufügen. Ich möchte keine neuen Eltern kastrieren. Ist dies die einzige Möglichkeit, ein Kind zu einem bestehenden Elternteil hinzuzufügen? Alle Beispiele im Internet scheinen ein Kind hinzuzufügen und ein neues Elternelement hinzuzufügen und kein Kind zu einem vorhandenen Elternelement hinzuzufügen. Jede Hilfe würde sehr geschätzt werden

    
user1626137 30.10.2012, 22:36
quelle

1 Antwort

23

"Julie" (Lerman) ist zufällig einer unserer Lehrer, wenn es um EF geht. Wie sie in ihrem Buch DbContext erklärt, können drei Eigenschaften in einer Eltern-Kind-Assoziation, zwei Navigationseigenschaften (parent.Children, child.Parent) und eine Fremdschlüsseleigenschaft (child.ParentId) vorkommen. Sie können eine dieser oder eine beliebige Kombination in Ihrem Code festlegen.

Wenn EF ausgelöst wird, um Änderungen zu erkennen (z. B. wenn SaveChanges aufgerufen wird), wird ein Prozess namens relation fixup gestartet, der sicherstellt, dass die drei Eigenschaften synchronisiert sind.

Sie haben also drei Optionen, um einem übergeordneten Element eine untergeordnete Entität hinzuzufügen:

  1. %Code%. Das übergeordnete Objekt sollte zuerst von der Datenbank abgerufen werden.
  2. %Code%. Erfordert außerdem ein bereits vorhandenes übergeordnetes Objekt aus der Datenbank.
  3. child.Parent = parentObject , für die Sie nur die ID kennen müssen. Sie können die ID so erhalten, wie Sie es vorgeschlagen haben, aber genauso gut, denn Objekte, von denen Sie wissen, dass sie nicht gelöscht werden, können Sie in einer Variablen speichern lassen, um sie Transaktionen wiederzuverwenden.

Bei den ersten beiden Optionen muss das untergeordnete Objekt nicht manuell zum Kontext hinzugefügt werden. EF weiß genug, um zu sehen, dass es neu ist. Mit der dritten Option muss es zu parentObject.Children.Add(child) vor child.ParentId = parentId hinzugefügt werden.

    
Gert Arnold 31.10.2012, 08:40
quelle