ключ сущности

Ключ сущности — это свойство или набор свойств типа сущности, используемых для определения удостоверения. Свойства, составляющие ключ сущности, выбираются во время разработки. Значения свойств ключа сущности должны однозначно идентифицировать экземпляр типа сущности в наборе сущностей во время выполнения. Свойства, составляющие ключ сущности, должны гарантировать уникальность экземпляра набора сущностей.

Ниже приводятся требования к набору свойств, входящих в ключ сущности.

  • Два ключа сущностей не могут быть идентичными в одном наборе сущностей. То есть для любых двух сущностей внутри набора сущностей значения для всех свойств, составляющих ключ, не могут быть одинаковыми. Тем не менее, некоторые (но не все) значения, составляющие ключ сущности, могут быть одинаковыми.

  • Ключ сущности должен состоять из набора непустых, неизменяемых, неизменяемых свойств примитивного типа.

  • Свойства, составляющие ключ сущности для данного типа сущности, не могут быть изменены. Для одного типа сущности возможен только один ключ сущности; суррогатные ключи не поддерживаются.

  • Если сущность участвует в иерархии наследования, корневая сущность должна содержать все свойства, составляющие ключ сущности, а ключ сущности должен быть определен в типе корневой сущности. Дополнительные сведения см. в разделе "Модель данных сущности: наследование".

Пример

На приведенной ниже схеме показана концептуальная модель с тремя типами сущностей: Book, Publisher и Author. Свойства каждого типа сущности, составляющие его ключ сущности, обозначаются знаком «(Ключ)». Обратите внимание, что тип сущности Author имеет ключ сущности, состоящий из двух свойств - Name и Address.

Example model with three entity types

В ADO.NET Entity Framework используется язык, зависящий от домена (DSL), называемый языком определения концептуальной схемы (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, которое может быть использовано для уникальной идентификации автора.

См. также