Entity Data Model: VererbungEntity Data Model: Inheritance

Der Entity Data Model (EDM) unterstützt die Vererbung von Entitäts Typen.The Entity Data Model (EDM) supports inheritance for entity types. Vererbung im EDM ist ähnlich wie Vererbung für Klassen in objektorientierten Programmiersprachen.Inheritance in the EDM is similar to inheritance for classes in object-oriented programming languages. 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.Like with classes in object-oriented languages, in a conceptual model you can define an entity type (a derived type) that inherits from another entity type (the base type). Im Gegensatz zu Klassen in der objektorientierten Programmierung erbt der abgeleitete Typ in einem konzeptionellen Modell immer alle Eigenschaften und Navigations Eigenschaften des Basistyps.However, unlike classes in object-oriented programming, in a conceptual model the derived type always inherits all the properties and navigation properties of the base type. Geerbte Eigenschaften in einem abgeleiteten Typ können nicht überschrieben werden.You cannot override inherited properties in a derived type.

In einem konzeptionellen Modell können Sie Vererbungshierarchien erstellen, in denen ein abgeleiteter Typ von einem anderen abgeleiteten Typ erbt.In a conceptual model you can build inheritance hierarchies in which a derived type inherits from another derived type. Der Typ am oberen Rand der Hierarchie (der einzige Typ in der Hierarchie, der kein abgeleiteter Typ ist) wird als Stammtypbezeichnet.The type at the top of the hierarchy (the one type in the hierarchy that is not a derived type) is called the root type. In einer Vererbungs Hierarchie muss der Entitäts Schlüssel für den Stammtyp definiert werden.In an inheritance hierarchy, the entity key must be defined on the root type.

Sie können keine Vererbungshierarchien erstellen, in denen ein abgeleiteter Typ von mehr als einem Typ erbt.You cannot build inheritance hierarchies in which a derived type inherits from more than one type. 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.For example, in a conceptual model with a Book entity type, you could define derived types FictionBook and NonFictionBook that each inherit from Book. Sie könnten dann jedoch keinen Typ definieren, der vom Typ FictionBook und vom Typ NonFictionBook erbt.However, you could not then define a type that inherits from both the FictionBook and NonFictionBook types.

BeispielExample

Das folgende Diagramm zeigt ein konzeptionelles Modell mit vier Entitäts Typen: Book , FictionBook , Publisher und Author .The following diagram shows a conceptual model with four entity types: Book, FictionBook, Publisher, and Author. Der FictionBook-Entitätstyp ist ein abgeleiteter Typ, der vom Book-Entitätstyp erbt.The FictionBook entity type is a derived type, inheriting from the Book entity type. Der FictionBook-Typ erbt die Eigenschaften ISBN (Key), Title und Revision, und definiert die zusätzliche Eigenschaft Genre.The FictionBook type inherits the ISBN (Key), Title, and Revision properties, and defines an additional property called Genre.

Das Diagramm zeigt ein konzeptionelles Modell mit vier Entitäts Typen.

Der ADO.NET-Entity Framework verwendet eine domänenspezifische Sprache (DSL) mit der Bezeichnung konzeptionelle Schema Definitions Sprache (CSDL), um konzeptionelle Modelle zu definieren.The ADO.NET Entity Framework uses a domain-specific language (DSL) called conceptual schema definition language (CSDL) to define conceptual models. Die folgende CSDL definiert den Entitätstyp FictionBook, der vom Book-Typ (wie in der Abbildung oben) erbt:The following CSDL defines an entity type, FictionBook, that inherits from the Book type (as in the diagram above):

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

Weitere InformationenSee also