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 de chave de entidade devem exclusivamente identificar uma instância do tipo de entidade dentro de conjunto de entidades em tempo de execução. As propriedades que compõem uma chave de entidade devem ser escolhidas para garantir a exclusividade de instâncias em um conjunto de entidades.
A seguir estão os requisitos para um conjunto de propriedades ser uma chave de entidade:
Nenhuma chave de duas entidades em um conjunto de entidades pode ser idêntica. Ou seja, para as duas entidades em 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 os valores) que compõem uma chave de entidade podem ser os mesmos.
Uma chave de entidade deve consistir de um conjunto de não-nulo, imutável, propriedades do tipo primitivo.
As propriedades que compõem uma chave de entidade para um tipo de dado entidade não pode ser alterado. Você não pode permitir mais de uma chave possível de entidade para um tipo de dado; entidade as chaves substitutas não são suportadas.
Quando uma entidade é empacotada 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, confira Modelo de Dados de Entidade: Herança.
Exemplo
O diagrama a seguir 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 denotadas com chave (“”). Observe que o tipo de entidade de Author
tem uma chave de entidade que consiste em duas propriedades, Name
e Address
.
O Entity Framework do ADO.NET usa uma DSL (linguagem específica de domínio) chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. CSDL a seguir define o tipo de entidade de Book
mostrado no diagrama anterior. Observe que a chave de entidade é definida pela propriedade de ISBN
do tipo de objeto.
<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 propriedade de ISBN
é uma boa opção para a chave de entidade como um número de livro (ISBN) de padrão internacional identifica um livro.
CSDL a seguir define o tipo de entidade de Author
mostrado no diagrama anterior. 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 opção razoável, porque dois autores de mesmo nome é improvável de viver no mesmo endereço. No entanto, esta opção para uma chave de entidade não garante absolutamente chaves exclusivas de entidade em um conjunto de entidades. Adicione uma propriedade, como AuthorId
, que pode ser usado para identificar exclusivamente um autor seria recomendado nesse caso.