entity key
Klíč entity je vlastnost nebo sada vlastností typu entity, které slouží k určení identity. Vlastnosti, které tvoří klíč entity, jsou vybrány v době návrhu. Hodnoty vlastností klíče entity musí jednoznačně identifikovat instanci typu entity v rámci entity nastavené za běhu. Vlastnosti, které tvoří klíč entity, by měly být zvoleny k zajištění jedinečnosti instancí v sadě entit.
Níže jsou uvedeny požadavky na sadu vlastností, které mají být klíčem entity:
Žádné dva klíče entit v sadě entit nemohou být identické. To znamená, že pro všechny dvě entity v rámci sady entit nemohou být hodnoty pro všechny vlastnosti, které tvoří klíč, stejné. Některé (ale ne všechny) hodnoty, které tvoří klíč entity, však můžou být stejné.
Klíč entity se musí skládat ze sady nenulových, neměnných a primitivních vlastností typu.
Vlastnosti, které tvoří klíč entity pro daný typ entity, nelze změnit. Pro daný typ entity nelze povolit více než jeden možný klíč entity; náhradní klíče nejsou podporovány.
Pokud je entita zapojená do hierarchie dědičnosti, musí kořenová entita obsahovat všechny vlastnosti, které tvoří klíč entity, a klíč entity musí být definován v kořenovém typu entity. Další informace najdete v tématu Entity Data Model: Dědičnost.
Příklad
Následující diagram znázorňuje koncepční model se třemi typy entit: Book
, Publisher
a Author
. Vlastnosti každého typu entity, který tvoří klíč entity, jsou označeny "(Key)". Všimněte si, že Author
typ entity má klíč entity, který se skládá ze dvou vlastností a Name
Address
.
ADO.NET Entity Framework používá jazyk specifický pro doménu (DSL) označovaný jako jazyk CSDL (Conceptual Schema Definition Language) k definování konceptuálních modelů. CsDL níže definuje Book
typ entity zobrazený v diagramu výše. Všimněte si, že klíč entity je definován odkazem na ISBN
vlastnost typu entity.
<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>
Vlastnost ISBN
je dobrou volbou pro klíč entity, protože číslo isBN (International Standard Book Number) jednoznačně identifikuje knihu.
CsDL níže definuje Author
typ entity zobrazený v diagramu výše. Všimněte si, že klíč entity se skládá ze dvou vlastností Name
a 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>
Použití Name
a Address
klíč entity je rozumnou volbou, protože dva autoři stejného názvu pravděpodobně nebudou žít na stejné adrese. Tato volba pro klíč entity však nezaručuje jedinečné klíče entit v sadě entit. V tomto případě se doporučuje přidat vlastnost, která AuthorId
by se dala použít k jednoznačné identifikaci autora.