共用方式為


實體鍵

實體索引鍵是用來判斷身分識別之實體類型的屬性或一組屬性。 組成實體索引鍵的屬性會在設計時間選擇。 實體金鑰屬性的值必須在實體 集合 中在執行時唯一識別實體類型實例。 應該選擇組成實體索引鍵的屬性,以確保實體集中實例的唯一性。

以下是一組屬性為實體鍵的需求條件:

  • 實體集中不可能有兩個相同的實體鍵。 也就是說,對於實體集內的任何兩個實體,構成索引鍵的所有屬性的值都不能相同。 不過,構成實體索引鍵的一些值(但並非全部)可以相同。

  • 實體索引鍵必須包含一組不可為 Null、不可變、基本 類型屬性

  • 組成指定實體類型之實體索引鍵的屬性無法變更。 您不能允許給定的實體類型有多個可能的實體鍵;不支援代理鍵。

  • 當實體涉及繼承階層時,根實體必須包含構成實體索引鍵的所有屬性,而且必須在根實體類型上定義實體索引鍵。 如需詳細資訊,請參閱 實體數據模型:繼承

範例

下圖顯示具有三種實體類型的概念模型: BookPublisherAuthor。 組成實體索引鍵的每個實體類型屬性都會以 “(Key)” 表示。 請注意, Author 實體類型具有由兩個屬性 NameAddress組成的實體索引鍵。

具有三種實體類型的範例模型

ADO.NET Entity Framework 會使用稱為概念架構定義語言 (CSDL) 的網域特定語言 (DSL) 來定義概念模型。 下方的 CSDL 定義了在上方圖示中顯示的實體類型。 請注意,實體索引鍵是藉由參考 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) 可唯一識別書籍。

下方的 CSDL 定義了在上方圖示中顯示的實體類型。 請注意,實體索引鍵由兩個屬性組成,分別是 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

另請參閱