エンティティ データ モデル (EDM) では、 エンティティ型の継承がサポートされています。 EDM での継承は、オブジェクト指向プログラミング言語のクラスの継承と似ています。 オブジェクト指向言語のクラスと同様に、概念モデルでは、別のエンティティ型 (基本型) から継承するエンティティ型 (派生型) を定義できます。 ただし、オブジェクト指向プログラミングのクラスとは異なり、概念モデルでは、派生型は常に基本型のすべての プロパティ と ナビゲーション プロパティ を継承します。 派生型の継承されたプロパティをオーバーライドすることはできません。
概念モデルでは、派生型が別の派生型から継承される継承階層を構築できます。 階層の先頭にある型 (派生型ではない階層内の 1 つの型) は 、ルート型と呼ばれます。 継承階層では、 エンティティ キー をルート型で定義する必要があります。
派生型が複数の型から継承される継承階層を構築することはできません。 たとえば、Book
エンティティ型を持つ概念モデルでは、派生型FictionBook
定義し、それぞれがNonFictionBook
から継承するBook
を定義できます。 ただし、 FictionBook
型と NonFictionBook
型の両方から継承する型を定義することはできませんでした。
例
次の図は、 Book
、 FictionBook
、 Publisher
、 Author
の 4 種類のエンティティを持つ概念モデルを示しています。
FictionBook
エンティティ型は派生型であり、Book
エンティティ型から継承されます。
FictionBook
型は、ISBN (Key)
、Title
、およびRevision
プロパティを継承し、Genre
と呼ばれる追加のプロパティを定義します。
ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL は、(上の図のように) FictionBook
型から継承するエンティティ型 (Book
) を定義します。
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>