Freigeben über


Objekte komplexer Typen (Entity Framework)

Komplexe Typen sind nicht skalare Eigenschaften von Entitätstypen, mit deren Hilfe skalare Eigenschaften in Entitäten organisiert werden können. Komplexe Typen bestehen wie Entitäten aus skalaren Eigenschaften oder anderen Eigenschaften von komplexem Typ. Ein komplexer Typ kann ohne eine übergeordnete Entität oder einen übergeordneten komplexen Typ nicht vorkommen. Da komplexe Typen nicht über Schlüssel verfügen, können Objekte komplexer Typen von Object Services nicht getrennt vom übergeordneten Objekt verwaltet werden. Weitere Informationen finden Sie unter Komplexer Typ (EDM).

Wenn die Entity Framework-Tools Objekte generieren, die Entitätstypen darstellen, erben diese Objekte von EntityObject. Ebenso erben für komplexe Typen generierte Objekte von ComplexObject. Beide Klassen erben von der StructuralObject-Basisklasse. Auf die skalaren Eigenschaften von Objekten komplexer Typen kann wie auf andere skalare Eigenschaften zugegriffen werden. Weitere Informationen finden Sie unter Gewusst wie: Erstellen und Ausführen von Objektabfragen mit komplexen Typen (Entity Framework).

Wenn Sie mit Objekten arbeiten, die komplexe Typen darstellen, beachten Sie die folgenden Punkte:

  • Eigenschaften komplexer Typen können nicht den Wert null haben. Eine InvalidOperationException wird ausgelöst, wenn SaveChanges aufgerufen wird und ein komplexes Objekt mit dem Wert NULL festgestellt wird. Wie skalare Eigenschaften von Entitäten können skalare Eigenschaften komplexer Objekte den Wert null haben.

  • Komplexe Typen können nicht von anderen komplexen Typen erben.

  • Wird eine Eigenschaft im Objektdiagramm eines komplexen Typs geändert, wird die Eigenschaft des übergeordneten Typs als geändert gekennzeichnet. Alle Eigenschaften im Objektdiagramm des komplexen Typs werden beim Aufruf von SaveChanges aktualisiert.

  • Komplexe Objekte, die von ComplexObject erben, werden instanziiert, wenn auf die Eigenschaft vom komplexen Typ zugegriffen wird, nicht, wenn das übergeordnete Objekt instanziiert wird.

  • Wenn eine benutzerdefinierte Datenklasse von EntityObject erbt, müssen Klassen von komplexen Typen von ComplexObject erben.

  • Sie können komplexe Typen verwenden, wenn Sie benutzerdefinierte Datenklassenschnittstellen wie IEntityWithKey implementieren. Bei der Verwendung von komplexen Typen mit benutzerdefinierten Datenklassen wird jedoch empfohlen, sowohl von EntityObject als auch von ComplexObject zu erben. Weitere Informationen finden Sie unter Anpassen von Objekten (Entity Framework).

Siehe auch

Weitere Ressourcen

Arbeiten mit Objekten (Entity Framework)