Entity Data Model: Vererbung

Das Entity Data Model (EDM) unterstützt Vererbung für Entitätstypen. Vererbung im EDM ist ähnlich wie Vererbung für Klassen in objektorientierten Programmiersprachen. Wie bei Klassen in objektorientierten Sprachen können Sie in einem konzeptionellen Modell einen Entitätstyp (einen abgeleiteten Typ) definieren, der von einem anderen Entitätstyp (dem Basistyp) erbt. Im Gegensatz zu Klassen in objektorientierter Programmierung erbt jedoch in einem konzeptionellen Modell der abgeleitete Typ immer alle Eigenschaften und Navigationseigenschaften des Basistyps. Geerbte Eigenschaften in einem abgeleiteten Typ können nicht überschrieben werden.

In einem konzeptionellen Modell können Sie Vererbungshierarchien erstellen, in denen ein abgeleiteter Typ von einem anderen abgeleiteten Typ erbt. Der Typ am Anfang der Hierarchie (der eine Typ in der Hierarchie, der kein abgeleiteter Typ ist) wird als Stammtyp bezeichnet. In einer Vererbungshierarchie muss der Entitätsschlüssel für den Stammtyp definiert sein.

Sie können keine Vererbungshierarchien erstellen, in denen ein abgeleiteter Typ von mehr als einem Typ erbt. In einem konzeptionellen Modell mit einem Book-Entitätstyp könnten Sie z. B. die abgeleiteten Typen FictionBook und NonFictionBook definieren, die jeweils von Book erben. Sie könnten dann jedoch keinen Typ definieren, der vom Typ FictionBook und vom Typ NonFictionBook erbt.

Beispiel

Das folgende Diagramm enthält ein konzeptionelles Modell mit vier Entitätstypen: Book, FictionBook, Publisher und Author. Der FictionBook-Entitätstyp ist ein abgeleiteter Typ, der vom Book-Entitätstyp erbt. Der FictionBook-Typ erbt die Eigenschaften ISBN (Key), Title und Revision, und definiert die zusätzliche Eigenschaft Genre.

Diagram that shows a conceptual model with four entity types.

Das ADO.NET Entity Framework verwendet eine domänenspezifische Sprache (DSL) mit der Bezeichnung „konzeptionelle Schemadefinitionssprache“ (CSDL), um konzeptionelle Modelle zu definieren. Die folgende CSDL definiert den Entitätstyp FictionBook, der vom Book-Typ (wie in der Abbildung oben) erbt:

<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
  <Property Type="String" Name="Genre" Nullable="false" />
</EntityType>

Siehe auch