Key 元素 (CSDL)
Key 元素是 EntityType 元素的子元素,可定义实体键**(实体类型的用于确定标识的一个或一组属性)。 构成实体键的属性是在设计时选择的。 实体键属性的值必须在运行时唯一标识实体集中的实体类型实例。 在选择构成实体键的属性时应确保实例在实体集中的唯一性。 Key 元素通过引用实体类型的一个或多个属性来定义实体键。
Key 元素可以具有以下子元素:
PropertyRef(一个或多个元素)
Annotation 元素(零个或多个元素)
适用的特性
可以将任何数量的批注特性(自定义 XML 特性)应用于 Key 元素。 然而,自定义特性可能不属于为 CSDL 保留的任何 XML 命名空间。 两个自定义特性的完全限定名不能相同。
示例
下面的示例定义一个名为 Book 的实体类型。 通过引用实体类型的 ISBN 属性来定义实体键。
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
对实体键使用 ISBN 属性是一个不错的选择,因为国际标准书号 (ISBN) 可以唯一地标识一本书。
下面的示例显示一个具有实体键的实体类型 (Author),该实体键具有两个属性:Name 和 Address。
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
对实体键使用 Name 和 Address 是一个合理的选择,因为两个同名作者住址相同的可能性很小。 但是,针对实体键的这种选择并不能绝对确保实体键在实体集中的唯一性。 在这种情况下,建议添加一个可用来唯一标识作者的属性,例如 AuthorId。
另请参见
概念
实体框架概述
CSDL 规范
Schema 元素 (CSDL)
其他资源
CSDL、SSDL 和 MSL 规范
ADO.NET Entity Data Model Tools
entity key (Entity Data Model)