Key 項目 (CSDL)
Key 項目是 EntityType 項目的子項目,可定義「實體索引鍵」(Entity Key) (實體類型的屬性或屬性集,可用來判斷識別)。 構成實體索引鍵的屬性是在設計階段選取的。 實體索引鍵屬性的值必須在執行階段的實體集中,單獨識別實體類型執行個體。 您應選取構成實體索引鍵的屬性,以保證執行個體在實體集中的唯一性。 Key 項目透過參考實體類型的一或多個屬性,定義實體索引鍵。
Key 項目可以擁有下列子項目:
PropertyRef (一或多個項目)
Annotation 項目 (零或多個項目)
適用屬性
任何數量的附註屬性 (自訂 XML 屬性) 都可以套用至 Key 項目。 不過,自訂屬性不可屬於任何 XML 命名空間,這是保留供 CSDL 使用。 任兩個自訂屬性的完整名稱不能相同。
範例
以下範例定義名為 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 屬性是實體索引鍵的最佳選擇,因為國際標準書號 (International Standard Book Number,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,可用於明確識別作者。
另請參閱
概念
Entity Framework 概觀
CSDL 規格
Schema 項目 (CSDL)
其他資源
CSDL、SSDL 和 MSL 規格
ADO.NET Entity Data Model Tools
entity key (Entity Data Model)