Sdílet prostřednictvím


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

Example model with three entity types

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á AuthorIdby se dala použít k jednoznačné identifikaci autora.

Viz také