Entity Data Model: VererbungEntity Data Model: Inheritance

Das Entity Data Model (EDM) unterstützt Vererbung für Entitätstypen.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 in einem konzeptionellen Modell Sie einen Entitätstyp definiert können (ein abgeleiteten Typ), die von einem anderen Entitätstyp erbt (die Basistyp).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). Jedoch im Gegensatz zu Klassen in objektorientierten Programmierung, in einem konzeptionellen Modell der abgeleitete Typ erbt immer alle die Eigenschaften und Navigationseigenschaften 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 Anfang der Hierarchie (einem Datentyp in der Hierarchie, die nicht auf ein abgeleiteter Typ ist) wird aufgerufen, die Stammtyp.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 Vererbungshierarchie der Entitätsschlüssel muss für den Stammtyp definiert sein.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ätstypen: 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.

Diagramm ein konzeptionelles Modell mit vier Entitätstypen zeigt.

Die ADO.NET Entity Framework verwendet eine domänenspezifische Sprache (DSL) Bezeichnung konzeptionelle Schemadefinitionssprache (CSDL), 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>

Siehe auchSee also