ключ сущности (модель EDM)
Ключ сущности является свойством или набором свойств типа сущности, которые используются для определения удостоверения. Свойства, составляющие ключ сущности, выбираются во время разработки. Значения свойств ключа сущности должны уникально определять экземпляр типа сущности внутри набора сущностей во время выполнения. Свойства, составляющие ключ сущности, должны гарантировать уникальность экземпляра набора сущностей.
Ниже приводятся требования к набору свойств, входящих в ключ сущности.
Два ключа сущностей не могут быть идентичными в одном наборе сущностей. То есть для любых двух сущностей внутри набора сущностей значения для всех свойств, составляющих ключ, не могут быть одинаковыми. Тем не менее, некоторые (но не все) значения, составляющие ключ сущности, могут быть одинаковыми.
Ключ сущности должен состоять из набора не допускающих значение NULL и неизменяемых свойств примитивного типа.
Свойства, составляющие ключ сущности для данного типа сущности, не могут быть изменены. Для одного типа сущности возможен только один ключ сущности; суррогатные ключи не поддерживаются.
Если сущность участвует в иерархии наследования, корневая сущность должна содержать все свойства, составляющие ключ сущности, а ключ сущности должен быть определен в типе корневой сущности. Дополнительные сведения см. в разделе Модель EDM: наследование.
Пример
На приведенной ниже схеме показана концептуальная модель с тремя типами сущностей: Book, Publisher и Author. Свойства каждого типа сущности, составляющие его ключ сущности, обозначаются знаком «(Ключ)». Обратите внимание, что тип сущности Author имеет ключ сущности, состоящий из двух свойств — Name и Address.
Платформа ADO.NET Entity Framework использует доменный язык DSL, называемый языком CSDL (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.
Использование в качестве ключа сущности параметров Name и Address является неплохим выбором, поскольку маловероятно, что у двух авторов с одинаковыми именами будет один и тот же адрес. Однако такой выбор ключа сущности не гарантирует уникальность ключей сущности в наборе сущностей. В данном случае рекомендуется добавить свойство, такое как AuthorId, которое может быть использовано для уникальной идентификации автора.