Поделиться через


Элемент Key (CSDL)

Элемент Key является дочерним элементом элемента EntityType, который определяет ключ сущности (свойство или набор свойств типа сущности, определяющих ее). Свойства, составляющие ключ сущности, выбираются во время разработки. Значения свойств ключа сущности должны уникально определять экземпляр типа сущности внутри набора сущностей во время выполнения. Свойства, составляющие ключ сущности, должны гарантировать уникальность экземпляра набора сущностей. Элемент Key определяет ключ сущности, ссылаясь на одно или несколько свойств типа сущности.

Элемент Key может иметь следующие дочерние элементы.

Применимые атрибуты

К элементу Key может быть применено любое количество атрибутов annotation (настраиваемых атрибутов XML). Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен 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 хорошо подойдет для использования в качестве ключа сущности, поскольку международный стандартный номер книги (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)