Entity Data Model:継承

Entity Data Model (EDM) では、エンティティ型の継承がサポートされています。 EDM の継承は、オブジェクト指向プログラミング言語におけるクラスの継承に似ています。 オブジェクト指向言語のクラスと同様、概念モデルでは、別のエンティティ型 ("基本型") を継承するエンティティ型 ("派生型") を定義できます。 ただし、オブジェクト指向プログラミングのクラスとは異なり、概念モデルでは、派生型は基本型のすべてのプロパティナビゲーション プロパティを常に継承します。 派生型の継承プロパティは、オーバーライドできません。

概念モデルでは、派生型が別の派生型を継承する継承階層を構築することができます。 階層の最上位にある型 (階層内で派生型ではない唯一の型) は、"ルート型" と呼ばれます。 継承階層では、ルート型にエンティティ キーを定義する必要があります。

複数の型から派生型を継承する継承階層を構築することはできません。 たとえば、Book エンティティ型の概念モデルでは、それぞれ FictionBook から継承する派生型、NonFictionBook および Book を定義することができます。 しかし、FictionBook 型と NonFictionBook 型の両方から継承する型を定義することはできません。

次の図では、BookFictionBookPublisherAuthor という 4 つのエンティティ型の概念モデルを示します。 FictionBook エンティティ型は、Book エンティティ型から継承する派生型です。 FictionBook 型は、ISBN (Key) プロパティ、Title プロパティ、および Revision プロパティを継承し、Genre と呼ばれる追加プロパティを定義します。

4 つのエンティティ型を含む概念モデルを示す図。

ADO.NET Entity Framework では、概念スキーマ定義言語 (CSDL) と呼ばれるドメイン固有言語 (DSL) を使用して概念モデルを定義します。 次の CSDL は、上のダイアグラムに示された FictionBook 型を継承する Book エンティティ型を定義しています。

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

関連項目