实体数据模型(EDM)支持 实体类型的继承。 EDM 中的继承类似于面向对象的编程语言中的类的继承。 与面向对象的语言中的类一样,在概念模型中,可以定义从另一个实体类型(基类型)继承的实体类型(派生类型)。 但是,与面向对象的编程中的类不同,在概念模型中,派生类型始终继承基类型的所有 属性 和 导航属性 。 不能重写派生类型中的继承属性。
在概念模型中,可以生成继承层次结构,其中派生类型继承自另一个派生类型。 层次结构顶部的类型(不是派生类型的层次结构中的一种类型)称为 根类型。 在继承层次结构中,必须在根类型上定义 实体键 。
无法生成派生类型从多个类型继承的继承层次结构。 例如,在具有 Book
实体类型的概念模型中,可以定义派生类型 FictionBook
,并且 NonFictionBook
每个类型都继承自 Book
。 但是,你无法定义一个同时继承自FictionBook
和NonFictionBook
类型的类型。
示例:
下图显示了一个概念模型,其中包含四种实体类型: Book
、 FictionBook
、 Publisher
和 Author
。 实体 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>