Partilhar via


chave de entidade

Uma chave de entidade é uma propriedade ou um conjunto de propriedades de um tipo de entidade que são usadas para determinar a identidade. As propriedades que compõem uma chave de entidade são escolhidas em tempo de design. Os valores das propriedades da chave de entidade devem identificar exclusivamente uma instância de tipo de entidade dentro de um conjunto de entidades em tempo de execução. As propriedades que compõem uma chave de entidade devem ser escolhidas para garantir a exclusividade das instâncias em um conjunto de entidades.

A seguir estão os requisitos para que um conjunto de propriedades seja uma chave de entidade:

  • Não há duas chaves de entidade dentro de um conjunto de entidades que possam ser idênticas. Ou seja, para quaisquer duas entidades dentro de um conjunto de entidades, os valores para todas as propriedades que constituem uma chave não podem ser os mesmos. No entanto, alguns (mas não todos) dos valores que compõem uma chave de entidade podem ser os mesmos.

  • Uma chave de entidade deve consistir em um conjunto de propriedades de tipo primitivo, imutáveis e não anuláveis.

  • As propriedades que compõem uma chave de entidade para um determinado tipo de entidade não podem ser alteradas. Não é possível permitir mais de uma chave de entidade possível para um determinado tipo de entidade; As chaves substitutas não são suportadas.

  • Quando uma entidade está envolvida em uma hierarquia de herança, a entidade raiz deve conter todas as propriedades que compõem a chave de entidade e a chave de entidade deve ser definida no tipo de entidade raiz. Para obter mais informações, consulte Modelo de dados de entidade: herança.

Exemplo

O diagrama abaixo mostra um modelo conceitual com três tipos de entidade: Book, Publisher, e Author. As propriedades de cada tipo de entidade que compõem sua chave de entidade são indicadas com "(Key)". Observe que o Author tipo de entidade tem uma chave de entidade que consiste em duas propriedades Name e Address.

Example model with three entity types

O ADO.NET Entity Framework usa uma linguagem específica de domínio (DSL) chamada linguagem de definição de esquema conceitual (CSDL) para definir modelos conceituais. A CSDL abaixo define o tipo de Book entidade mostrado no diagrama acima. Observe que a chave de entidade é definida fazendo referência à ISBN propriedade do tipo de entidade.

<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>

A ISBN propriedade é uma boa escolha para a chave de entidade porque um ISBN (International Standard Book Number) identifica exclusivamente um livro.

A CSDL abaixo define o tipo de Author entidade mostrado no diagrama acima. Observe que a chave de entidade consiste em duas propriedades Name e 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>

Usar Name e Address para a chave de entidade é uma escolha razoável, porque é improvável que dois autores com o mesmo nome vivam no mesmo endereço. No entanto, essa escolha para uma chave de entidade não garante absolutamente chaves de entidade exclusivas em um conjunto de entidades. Neste caso, recomenda-se adicionar uma propriedade, como AuthorId, que possa ser usada para identificar exclusivamente um autor.

Consulte também