Compartilhar 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 na fase de design. Os valores das propriedades de chave de entidade devem identificar exclusivamente uma instância de entidade do tipo em 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:

  • Nenhuma chave de entidade dentro de um conjunto de entidades pode ser idêntica. Ou seja, para qualquer duas entidades dentro de um conjunto de entidades, os valores de 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 não anuláveis, imutáveis.

  • As propriedades que compõem uma chave de entidade para um determinado tipo de entidade não podem ser alteradas. Você não pode permitir mais de uma chave de entidade possível para um determinado tipo de entidade; Não há suporte para chaves substitutas.

  • 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 o Modelo de Dados da Entidade: Herança.

Exemplo

O diagrama abaixo mostra um modelo conceitual com três tipos de entidade: Book, Publishere 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.

Modelo de exemplo com três tipos de entidade

O ADO.NET Entity Framework usa uma DSL (linguagem específica do domínio) chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. O CSDL abaixo define o Book tipo de 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 opção para a chave de entidade porque um ISBN (Número de Livro Padrão Internacional) identifica exclusivamente um livro.

O CSDL abaixo define o Author tipo de 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, pois é improvável que dois autores com o mesmo nome vivam no mesmo endereço. No entanto, essa opção para uma chave de entidade não garante absolutamente chaves de entidade exclusivas em um conjunto de entidades. Adicionar uma propriedade, como AuthorId, que poderia ser usada para identificar exclusivamente um autor seria recomendável nesse caso.

Consulte também