다음을 통해 공유


엔터티 키

엔터티 키ID를 확인하는 데 사용되는 엔터티 형식의 속성 또는 속성 집합입니다. 엔터티 키를 구성하는 속성은 디자인 타임에 선택됩니다. 엔터티 키 속성의 값은 런타임에 설정된 엔터티 내에서 엔터티 형식 인스턴스를 고유하게 식별해야 합니다. 엔터티 집합의 인스턴스 고유성을 보장하기 위해 엔터티 키를 구성하는 속성을 선택해야 합니다.

다음은 속성 집합이 엔터티 키가 되기 위한 요구 사항입니다.

  • 엔터티 집합 내의 두 엔터티 키는 동일할 수 없습니다. 즉, 엔터티 집합 내의 두 엔터티에 대해 키를 구성하는 모든 속성의 값은 같을 수 없습니다. 그러나 엔터티 키를 구성하는 일부 값(전부는 아님)은 동일할 수 있습니다.

  • 엔터티 키는 nullable이 아닌 변경할 수 없는 기본 형식 속성 집합으로 구성되어야 합니다.

  • 지정된 엔터티 형식에 대한 엔터티 키를 구성하는 속성은 변경할 수 없습니다. 지정된 엔터티 형식에 대해 두 개 이상의 가능한 엔터티 키를 허용할 수 없습니다. 서로게이트 키는 지원되지 않습니다.

  • 엔터티가 상속 계층 구조에 관련된 경우 루트 엔터티는 엔터티 키를 구성하는 모든 속성을 포함해야 하며, 엔터티 키는 루트 엔터티 형식에 정의되어야 합니다. 자세한 내용은 엔터티 데이터 모델: 상속을 참조하세요.

예시

아래 다이어그램은 세 가지 Book엔터티 형식( , PublisherAuthor)이 있는 개념적 모델을 보여줍니다. 엔터티 키를 구성하는 각 엔터티 형식의 속성은 "(Key)"로 표시됩니다. Author 엔터티 형식에는 두 가지 속성 Name 으로 구성된 엔터티 키가 있습니다Address.

세 가지 엔터티 형식을 가진 예제 모델

ADO.NET Entity FrameworkCSDL(개념 스키마 정의 언어)이라는 DSL(도메인별 언어)을 사용하여 개념 모델을 정의합니다. 아래 CSDL은 위의 다이어그램에 표시된 엔터티 형식을 정의 Book 합니다. 엔터티 키는 엔터티 형식의 ISBN 속성을 참조하여 정의됩니다.

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

ISBN ISBN(International Standard Book Number)은 책을 고유하게 식별하므로 이 속성은 엔터티 키에 적합합니다.

아래 CSDL은 위의 다이어그램에 표시된 엔터티 형식을 정의 Author 합니다. 참고하세요, 엔터티 키는 두 가지 속성 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>

NameAddress를 엔터티 키로 사용하는 것은 적절한 선택입니다. 동일한 이름을 가진 두 명의 저자가 같은 주소에 살 가능성은 낮기 때문입니다. 그러나 엔터티 키에 대한 이 선택은 엔터티 집합의 고유 엔터티 키를 절대적으로 보장하지는 않습니다. 이 경우 작성자를 고유하게 식별하는 데 사용할 수 있는 속성(예: AuthorId)을 추가하는 것이 좋습니다.

참고하십시오