Share via


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, Publisheroch 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 NameAddress.

Example model with three entity types

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

<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 AuthorIdkan användas för att unikt identifiera en författare.

Se även