entitetsnyckel
En entitetsnyckel är en egenskap eller en uppsättning egenskaper av en entitetstyp som används för att fastställa identitet. De egenskaper som utgör en entitetsnyckel väljs vid designtillfället. Värdena för entitetsnyckelegenskaper måste unikt identifiera en entitetstypinstans inom en entitetsuppsättning vid körning. De egenskaper som utgör en entitetsnyckel bör väljas för att garantera unika instanser i en entitetsuppsättning.
Följande är kraven för att en uppsättning egenskaper ska vara en entitetsnyckel:
Inga två entitetsnycklar i en entitetsuppsättning kan vara identiska. För två entiteter i en entitetsuppsättning kan värdena för alla egenskaper som utgör en nyckel inte vara desamma. Vissa (men inte alla) av de värden som utgör en entitetsnyckel kan dock vara desamma.
En entitetsnyckel måste bestå av en uppsättning icke-nullbara, oföränderliga, primitiva typegenskaper.
Egenskaperna som utgör en entitetsnyckel för en viss entitetstyp kan inte ändras. Du kan inte tillåta mer än en möjlig entitetsnyckel för en viss entitetstyp. surrogatnycklar stöds inte.
När en entitet ingår i en arvshierarki måste rotentiteten innehålla alla egenskaper som utgör entitetsnyckeln och entitetsnyckeln måste definieras för rotentitetstypen. Mer information finns i Entitetsdatamodell: Arv.
Exempel
Diagrammet nedan visar en konceptmodell med tre entitetstyper: Book
, Publisher
och Author
. Egenskaperna för varje entitetstyp som utgör dess entitetsnyckel anges med "(Key)". Observera att entitetstypen Author
har en entitetsnyckel som består av två egenskaper och Name
Address
.
ADO.NET Entity Framework använder ett domänspecifikt språk (DSL) som kallas CSDL (Conceptual Schema Definition Language) för att definiera konceptuella modeller. CSDL nedan definierar entitetstypen Book
som visas i diagrammet ovan. Observera att entitetsnyckeln definieras genom att referera till ISBN
egenskapen för entitetstypen.
<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>
Egenskapen ISBN
är ett bra val för entitetsnyckeln eftersom ett internationellt standardboknummer (ISBN) unikt identifierar en bok.
CSDL nedan definierar entitetstypen Author
som visas i diagrammet ovan. Observera att entitetsnyckeln består av två egenskaper och 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>
Att använda Name
och Address
för entitetsnyckeln är ett rimligt val eftersom det är osannolikt att två författare med samma namn bor på samma adress. Det här valet för en entitetsnyckel garanterar dock inte helt unika entitetsnycklar i en entitetsuppsättning. I det här fallet rekommenderas att du lägger till en egenskap, till exempel , som AuthorId
kan användas för att unikt identifiera en författare.