Key 元素 (CSDL)

Key 元素是 EntityType 元素的子元素,可定义实体键**(实体类型的用于确定标识的一个或一组属性)。 构成实体键的属性是在设计时选择的。 实体键属性的值必须在运行时唯一标识实体集中的实体类型实例。 在选择构成实体键的属性时应确保实例在实体集中的唯一性。 Key 元素通过引用实体类型的一个或多个属性来定义实体键。

Key 元素可以具有以下子元素:

适用的特性

可以将任何数量的批注特性(自定义 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),该实体键具有两个属性:NameAddress

<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>

对实体键使用 NameAddress 是一个合理的选择,因为两个同名作者住址相同的可能性很小。 但是,针对实体键的这种选择并不能绝对确保实体键在实体集中的唯一性。 在这种情况下,建议添加一个可用来唯一标识作者的属性,例如 AuthorId

另请参见

概念

实体框架概述
CSDL 规范
Schema 元素 (CSDL)

其他资源

CSDL、SSDL 和 MSL 规范
ADO.NET Entity Data Model Tools
entity key (Entity Data Model)