Erstellen, Hinzufügen, Ändern und Löschen von Objekten (Entity Framework)

Objekte in einem Objektkontext sind Instanzen von Entitätstypen, die Daten in der Datenquelle darstellen. Sie können Objekte in einem Objektkontext ändern, erstellen und löschen, und Entity Framework verfolgt die an diesen Objekten vorgenommenen Änderungen nach. Beim Aufrufen der SaveChanges-Methode werden von Entity Framework Befehle generiert und ausgeführt, die die entsprechenden Anweisungen zum Einfügen, Aktualisieren oder Löschen für die Datenquelle ausführen. Weitere Informationen finden Sie unter Speichern von Änderungen und Verwalten von Parallelität (Entity Framework).

Zuordnen von Einfüge-, Update- und Löschfunktionen zu gespeicherten Prozeduren

Entity Framework ermöglicht, Einfüge-, Update- und Löschvorgänge eines Entitätstyps gespeicherten Prozeduren zuzuordnen. Wenn Sie vorhaben, den Entitäten gespeicherte Prozeduren zuzuordnen, ist es empfehlenswert, alle drei Vorgänge zuzuordnen. Wenn Sie z. B. einen Entitätstyp gespeicherten Einfüge- und Updateprozeduren zuordnen, die gespeicherte Löschprozedur jedoch nicht zuordnen, und Sie versuchen dann, ein Objekt dieses Typs zu löschen, schlägt der Löschvorgang zur Laufzeit mit einer UpdateException fehl. Weitere Informationen finden Sie unter How to: Map Modification Functions to Stored Procedures und Walkthrough: Mapping an Entity to Stored Procedures.

Erstellen und Hinzufügen von Objekten

Möchten Sie Daten in die Datenquelle einfügen, müssen Sie eine Instanz eines Entitätstyps erstellen und das Objekt einem Objektkontext hinzufügen. Bevor Sie ein neues Objekt in der Datenquelle speichern können, müssen Sie zuerst alle Eigenschaften festlegen, die keine NULL-Werte unterstützen. Wenn Sie mit von Entity Framework generierten Klassen arbeiten, sollten Sie die Verwendung der statischen CreateObjectName-Methode des Entitätstyps erwägen, um eine neue Instanz eines Entitätstyps zu erstellen. Die Entity Data Model -Tools fügen bei der Generierung der Entitätstypen diese Methode in jede Klasse ein. Diese create-Methode erstellt eine Objektinstanz und legt alle Eigenschaften der Klasse fest, die nicht NULL sein dürfen. Die Methode enthält einen Parameter für jede Eigenschaft, für die in der CSDL-Datei das Nullable="false"-Attribut festgelegt wurde. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Objekts mit der statischen Create-Methode (Entity Framework).

Verwenden Sie, wenn Sie mit POCO-Entitäten ("einfache alte" CLR-Objekte) arbeiten, die CreateObject-Methode statt des new-Operators, um ein neues Objekt zu erstellen. Die CreateObject-Methode schließt die neue POCO-Instanz im entsprechenden Proxyobjekt ein. Weitere Informationen finden Sie unter Arbeiten mit POCO-Entitäten (Entity Framework).

Sie können einem Objektkontext neue Objekte mit einer der folgenden Methoden hinzufügen:

  • Die AddObject-Methode von ObjectSet.

  • Die AddObject-Methode von ObjectContext.

  • Die Add-Methode von EntityCollection. Bei von Entity Framework generierten Entitäten und Proxyobjekten werden hinzugefügte Entitäten an den Kontext angefügt, sobald das Prinzipalobjekt angefügt wird. POCO-Entitäten werden angefügt, sobald die DetectChanges-Methode aufgerufen wird.

Folgendes ist beim Hinzufügen neuer Objekte zu beachten:

  • Bevor SaveChanges aufgerufen wird, generiert Entity Framework einen temporären Schlüsselwert für jedes neue Objekt. Nach dem Aufruf von SaveChanges, wird der Schlüsselwert durch den Identitätswert ersetzt werden, der beim Einfügen einer neuen Zeile von der Datenquelle zugewiesen wurde.

  • Wurde der Schlüsselwert einer Entität nicht von der Datenquelle generiert, sollten Sie einen eindeutigen Wert zuweisen. Wenn zwei Objekte über denselben vom Benutzer festgelegten Schlüsselwert verfügen, wird beim Aufrufen von SaveChanges eine InvalidOperationException ausgelöst. In diesem Fall sollten eindeutige Werte zugewiesen und der Vorgang wiederholt werden.

Löschen von Objekten

Ein Aufruf der DeleteObject-Methode von ObjectSet oder der DeleteObject-Methode von ObjectContext markiert das angegebene Objekt als zu löschendes Objekt. Die Zeile wird erst aus der Datenquelle gelöscht, nachdem SaveChanges aufgerufen wurde. Das Verhalten beim Löschen von Objekten unterscheidet sich in Entity Framework je nach dem Typ der Beziehung, zu der das Objekt gehört.

In einer identifizierenden Beziehung, bei der ein Primärschlüssel der Prinzipalentität Teil des Primärschlüssels der abhängigen Entität ist, kann das Löschen eines Objekts auch das Löschen verknüpfter Objekte nach sich ziehen. Es kann keine abhängigen Objekte ohne eine definierte Beziehung zum übergeordneten Objekt geben. Wenn das übergeordnete Objekt gelöscht wird, werden auch alle untergeordneten Objekte gelöscht. Dies entspricht dem Aktivieren des <OnDelete Action="Cascade" />-Attributs in der Zuordnung für die Beziehung.

In einer nicht identifizierenden Beziehung, die als Fremdschlüsselzuordnung dargestellt wird, legt Entity Framework auf NULL festlegbare Fremdschlüsseleigenschaften abhängiger Objekte auf NULL fest, wenn das Prinzipalobjekt gelöscht wird.

Weitere Informationen finden Sie unter OnDelete-Element (CSDL) und Definieren und Verwalten von Beziehungen (Entity Framework).

Ändern von Objekten

Entity Framework verfolgt Änderungen an Objekten nach, die an einen ObjectContext angefügt wurden. Die Entity Data Model -Tools generieren die beiden partiellen Methoden OnPropertyChanging und OnPropertyChanged. Diese Methoden werden im Eigenschaftensetter aufgerufen. Erweitern Sie diese Methoden in partiellen Klassen, um während der Eigenschaftsänderungen benutzerdefinierte Geschäftslogik einzufügen. Weitere Informationen finden Sie unter Gewusst wie: Ausführen von Geschäftslogik im Verlauf von Skalareigenschaftsänderungen (Entity Framework). Hilfreiche Informationen zur Arbeit mit POCO-Entitäten finden Sie unter Verfolgen von Änderungen in POCO-Entitäten (Entity Framework).

Folgendes ist beim Ändern von Objekten zu beachten:

  • Wird eine skalare oder komplexe Eigenschaft eines komplexen Objekts geändert, wird der Zustand des Entitätsobjekts der obersten Ebene in Modified geändert. In POCO-Entitäten, die die Anforderungen für die Proxygenerierung nicht erfüllen, die in Anforderungen für die Erstellung von POCO-Proxys (Entity Framework) beschrieben wurden, wird der Zustand der geänderten Eigenschaften in Modified geändert, sobald die DetectChanges-Methode aufgerufen wird.

  • Änderungen werden nicht nachverfolgt, wenn sich Objekte in dem Zustand Detached befinden. Objekte befinden sich in diesem Zustand, wenn sie von einer Abfrage zurückgegeben werden, die die Zusammenführungsoption NoTracking verwendet, oder nachdem sie mithilfe eines Aufrufs von Detach von einem ObjectContext getrennt wurden.

  • Wenn Sie eine Fremdschlüsselzuordnung ändern, ändert sich der Zustand des abhängigen Objekts in Modified. Wenn Sie eine unabhängige Zuordnung ändern, ändert sich der Zustand des abhängigen Objekts nicht.

Informationen zum Nachverfolgen von Änderungen in POCO-Entitäten finden Sie unter Verfolgen von Änderungen in POCO-Entitäten (Entity Framework).

Hinzufügen von Objekten zu einem bestimmten EntitySet

Gelegentlich gehört ein Entitätstyp mehreren Entitätenmengen an. Eine Datenbank kann beispielsweise zwei Tabellen mit identischen Schemas enthalten. Dies kann der Fall sein, wenn die Daten partitioniert wurden, um einen effizienteren Datensicherungsprozess zu erreichen. Kundendaten könnten beispielsweise zwischen der Customer-Tabelle und der CustomerArchive-Tabelle partitioniert werden, wobei CustomerArchive über dasselbe Schema verfügt wie Customer, jedoch für Kunden verwendet wird, die seit mehr als sechs Monaten keine Aufträge mehr erteilt haben. Customer könnte jede Nacht gesichert werden, während CustomerArchive nur einmal pro Woche gesichert wird. Für die Zuordnung müssen Customer und CustomerArchive verschiedenen Entitätenmengen angehören. Entity Framework unterstützt dieses Szenario dadurch, dass ein Entitätstyp in einer oder mehreren Entitätenmengen vorhanden sein kann. Weitere Informationen finden Sie unter EntitySet-Element (CSDL).

Wenn ein Entitätstyp in mehreren Entitätenmengen vorhanden ist, ermöglicht Entity Framework das Hinzufügen neuer Instanzen des Typs zu einer bestimmten Entitätenmenge. Ab .NET Framework Version 4 verfügt eine generierte ObjectContext-Klasse für ein bestimmtes Modell über Eigenschaften vom ObjectSet-Typ, die die Entitätssätze des Modells darstellen. Verwenden Sie die AddObject-Methode, um dem Objektkontext neue Objekte hinzuzufügen. Weitere Informationen finden Sie unter Arbeiten mit ObjectSet (Entity Framework). In .NET Framework Version 3.5 SP1 muss der Wert von entitySetName angegeben werden, wenn die AddObject-Methode aufgerufen wird, um das Objekt dem Objektkontext hinzuzufügen.

In diesem Abschnitt

Gewusst wie: Hinzufügen, Ändern und Löschen von Objekten (Entity Framework)

Gewusst wie: Erstellen eines Objekts mit der statischen Create-Methode (Entity Framework)

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit mehreren Entitätenmengen pro Typ (Entity Framework)
Gewusst wie: Hinzufügen, Ändern und Löschen von Objekten (Entity Framework)

Konzepte

Definieren und Verwalten von Beziehungen (Entity Framework)
Arbeiten mit POCO-Entitäten (Entity Framework)
Arbeiten mit ObjectSet (Entity Framework)
Arbeiten mit ObjectSet (Entity Framework)
OnDelete-Element (CSDL)