Entity Data Model:継承
Entity Data Model (EDM) では、エンティティ型の継承がサポートされています。 EDM の継承は、オブジェクト指向プログラミング言語におけるクラスの継承に似ています。 オブジェクト指向言語のクラスと同様、概念モデルでは、別のエンティティ型 ("基本型") を継承するエンティティ型 ("派生型") を定義できます。 ただし、オブジェクト指向プログラミングのクラスとは異なり、概念モデルでは、派生型は基本型のすべてのプロパティとナビゲーション プロパティを常に継承します。 派生型の継承プロパティは、オーバーライドできません。
概念モデルでは、派生型が別の派生型を継承する継承階層を構築することができます。 階層の最上位にある型 (階層内で派生型ではない唯一の型) は、"ルート型" と呼ばれます。 継承階層では、ルート型にエンティティ キーを定義する必要があります。
複数の型から派生型を継承する継承階層を構築することはできません。 たとえば、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>