实体数据模型:继承
实体数据模型 (EDM) 支持实体类型的继承。 EDM 中的继承与面向对象的编程语言中的类的继承类似。 与面向对象的语言中的类相似,在概念模型中,可以定义继承自另一个实体类型(“基类型”)的实体类型(“派生类型”)。 但是,与面向对象编程中的类不同的是,在概念模型中,派生类型始终会继承基类型的所有属性和导航属性。 不能重写派生类型中的继承属性。
在概念模型中,可以构建继承层次结构,其中一个派生类型将继承自另一个派生类型。 位于层次结构顶部的类型(层次结构中不是派生类型的一个类型)称为“根类型”。 在继承层次结构中,必须在根类型上定义实体键。
不能构建这样的继承层次结构,即一个派生类型继承自多个类型。 例如,在包含 Book
实体类型的概念模型中,可以定义都是继承自 FictionBook
的派生类型 NonFictionBook
和 Book
。 但是,随后不能定义同时继承自 FictionBook
和 NonFictionBook
类型的类型。
示例
下图显示了一个具有四个实体类型的概念模型:Book
、FictionBook
、Publisher
和 Author
。 FictionBook
实体类型是一个派生类型,继承自 Book
实体类型。 FictionBook
类型继承了 ISBN (Key)
、Title
和 Revision
属性,并定义了一个名为 Genre
的附加属性。
ADO.NET 实体框架使用一种称为“概念架构定义语言 (CSDL)”的特定于域的语言 (DSL) 来定义概念模型。 下面的 CSDL 定义了一个实体类型 FictionBook
,它继承自 Book
类型(如上图中所示):
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>