entiteitssleutel
Een entiteitssleutel is een eigenschap of een set eigenschappen van een entiteitstype die worden gebruikt om de identiteit te bepalen. De eigenschappen waaruit een entiteitssleutel bestaat, worden gekozen tijdens het ontwerp. De waarden van eigenschappen van entiteitssleutels moeten een exemplaar van het entiteitstype uniek identificeren binnen een entiteit die tijdens de runtime is ingesteld . De eigenschappen waaruit een entiteitssleutel bestaat, moeten worden gekozen om de uniekheid van exemplaren in een entiteitsset te garanderen.
Hier volgen de vereisten voor een set eigenschappen die een entiteitssleutel moeten zijn:
Er kunnen geen twee entiteitssleutels binnen een entiteitsset identiek zijn. Voor twee entiteiten binnen een entiteitsset kunnen de waarden voor alle eigenschappen die een sleutel vormen, dus niet hetzelfde zijn. Sommige (maar niet alle) waarden waaruit een entiteitssleutel bestaat, kunnen echter hetzelfde zijn.
Een entiteitssleutel moet bestaan uit een set niet-nullable, onveranderbare, primitieve typeeigenschappen.
De eigenschappen waaruit een entiteitssleutel voor een bepaald entiteitstype bestaat, kunnen niet worden gewijzigd. U kunt niet meer dan één mogelijke entiteitssleutel toestaan voor een bepaald entiteitstype; surrogaatsleutels worden niet ondersteund.
Wanneer een entiteit betrokken is bij een overnamehiërarchie, moet de hoofdentiteit alle eigenschappen bevatten waaruit de entiteitssleutel bestaat en moet de entiteitssleutel worden gedefinieerd op het type hoofdentiteit. Zie Entity Data Model: Overname voor meer informatie.
Opmerking
In het onderstaande diagram ziet u een conceptueel model met drie entiteitstypen: Book
, Publisher
en Author
. De eigenschappen van elk entiteitstype waaruit de entiteitssleutel bestaat, worden aangeduid met '(Key)'. Houd er rekening mee dat het Author
entiteitstype een entiteitssleutel heeft die bestaat uit twee eigenschappen en Name
Address
.
De ADO.NET Entity Framework maakt gebruik van een domeinspecifieke taal (DSL) genaamd conceptuele schemadefinitietaal (CSDL) om conceptuele modellen te definiëren. In de onderstaande CSDL wordt het Book
entiteitstype gedefinieerd dat in het bovenstaande diagram wordt weergegeven. Houd er rekening mee dat de entiteitssleutel wordt gedefinieerd door te verwijzen naar de ISBN
eigenschap van het entiteitstype.
<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>
De ISBN
eigenschap is een goede keuze voor de entiteitssleutel omdat een International Standard Book Number (ISBN) een boek uniek identificeert.
In de onderstaande CSDL wordt het Author
entiteitstype gedefinieerd dat in het bovenstaande diagram wordt weergegeven. Houd er rekening mee dat de entiteitssleutel bestaat uit twee eigenschappen en 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>
Het gebruik Name
en Address
voor de entiteitssleutel is een redelijke keuze, omdat twee auteurs van dezelfde naam waarschijnlijk niet op hetzelfde adres wonen. Deze keuze voor een entiteitssleutel garandeert echter niet absoluut unieke entiteitssleutels in een entiteitsset. Het toevoegen van een eigenschap, zoals AuthorId
, die kan worden gebruikt om een auteur uniek te identificeren, wordt in dit geval aanbevolen.