엔터티 집합(EDM)

EDM(엔터티 데이터 모델)에서 EntitySet은 단일 형식의 엔터티를 위한 논리적 컨테이너입니다. 마찬가지로 AssociationSet은 같은 형식의 연결을 위한 컨테이너입니다. 스키마에 정의된 연결 집합과 엔터티 집합은 응용 프로그램 데이터가 저장되는 데이터베이스 테이블에 매핑됩니다. 엔터티 집합과 연결 집합은 응용 프로그램 코드에서 사용하는 프로그래밍 개체 모델에서 클래스의 기반이 됩니다.

엔터티 집합과 연결 집합은 엔터티 및 연결의 범위를 정의하며, 엔터티 컨테이너는 엔터티와 연결을 보관하는 저장소 컨테이너를 정의합니다. SimpleType 집합은 없습니다. 이러한 형식은 엔터티의 속성에 할당된 값으로 인스턴스화됩니다.

EntityType에 대한 EntitySetEntityType 또는 하위 형식 중 하나의 인스턴스를 포함합니다. 같은 EntityType을 사용하여 EntitySet을 두 개 이상 정의할 수 있습니다. EntityType의 인스턴스는 한 EntitySet의 멤버만 될 수 있습니다.

EntitySet의 엔터티 인스턴스는 다음 세 가지 조건을 충족해야 합니다.

  • 엔터티 인스턴스의 형식이 EntitySetEntityType이거나 EntityType의 하위 형식이어야 합니다.

  • 각 엔터티 인스턴스의 Key 값이 EntitySet에서 고유해야 합니다.

  • 엔터티 인스턴스가 다른 EntitySet의 멤버가 아니어야 합니다.

다음 CSDL(개념 스키마 정의 언어) 구문은 CustomerSet이라는 EntitySet의 선언입니다. EntitySetCustomerType 엔터티의 인스턴스를 포함합니다.

<EntitySet Name="CustomerSet" EntityType="CustomerType"/>

다음 스키마 세그먼트에서 두 EntityType 선언은 ProductSupplier 엔터티 형식을 정의합니다. ProductSupplier 엔터티를 기반으로 하는 엔터티 집합의 이름은 ProductsSuppliers와 같이 복수 형태로 적절하게 지정됩니다. 이러한 엔터티 집합은 EntityContainer의 정의에 추가됩니다.

<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
    xmlns:edm="https://schemas.microsoft.com/ado/2006/04/edm"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
    Namespace="MyCompany.LOBSchema" Alias="Self">

<EntityType Name="Product">
    <Key>
      <PropertyRef Name="ProductID" />
    </Key>
    <Property Name="ProductID" Type="Int32" Nullable="false" />
    <Property Name="ProductName" Type="String" Nullable="false" />
    <Property Name="UnitPrice" Type="Decimal" Nullable="true" />
    <Property Name="UnitsInStock" Type="Int16" Nullable="true" />
</EntityType>

<EntityType Name="Supplier">
    <Key>
      <PropertyRef Name="SupplierID" />
    </Key>
    <Property Name="SupplierID" Type="Int32" Nullable="false" />
    <Property Name="CompanyName" Type="String" Nullable="false" />
    <Property Name="ContactName" Type="String" Nullable="true" />
    <Property Name="HomePage" Type="String" Nullable="true" />
</EntityType>

<EntityContainer Name="LOB-Data">
    <EntitySet Name="Products" EntityType="Product" />
    <EntitySet Name="Suppliers" EntityType="Supplier" />
</EntityContainer>

</Schema>

엔터티 컨테이너에 대한 자세한 내용은 엔터티 컨테이너(EDM)를 참조하십시오.

형식별 다중 엔터티 집합

EDM(엔터티 데이터 모델)을 사용하면 단일 엔터티 컨테이너 내에 여러 엔터티 집합을 정의하거나 여러 엔터티 컨테이너를 하나의 엔터티 형식에 대해 정의할 수 있습니다. MEST(유형별 다중 엔터티 집합)를 정의하면 데이터베이스에 분할이 있거나 여러 테이블의 구조가 동일한 경우에 코드를 효율적으로 사용할 수 있습니다.

데이터베이스는 성능, 가용성, 관리 효율성 등의 여러 가지 이유로 분할됩니다. 대량의 고객 계정을 관리하는 금융 기관의 경우 성능 향상을 위해 고객 데이터의 지역 분포별로 데이터베이스 시스템을 분할할 수 있습니다. 데이터를 지역별 하위 집합으로 제한하면 데이터 검색 및 업데이트 작업을 더욱 빠르게 수행할 수 있습니다. MEST를 구현하려면 같은 데이터베이스 내에서 분할이 수행되어야 합니다. 여러 데이터베이스에 걸쳐 분할이 수행된 경우 MEST 시나리오 대신 여러 연결 문자열과 컨텍스트를 사용해야 합니다.

자주 액세스하는 데이터를 매일 밤마다 백업하고, 1년 이상 액세스하지 않은 데이터를 보관해 두려는 IT 부서의 경우에도 분할이 유용할 수 있습니다. DBA는 1년 이상 계정을 사용하지 않은 고객을 같은 테이블 스키마를 사용하는 동일한 데이터베이스의 보관 테이블에 보관할 수 있습니다.

두 개 이상의 엔터티 집합의 멤버인 엔터티 형식 간의 연결 구조를 고려하는 것이 중요합니다. MEST는 테스트된 구조에서 가장 쉽게 구현되었으며 다음과 같은 시나리오가 성공적으로 사용되었습니다.

  • 일 대 다 연결에서 연결의 "일" 쪽에서 MEST로 구현된 엔터티는 "다" 쪽에 있는 두 개의 다른 엔터티 집합과 관계를 갖습니다. 예를 들어 두 엔터티 집합 PreferedCustomersCreditRiskCustomers에서 Customer 엔터티 형식을 사용하여 다음 시나리오를 구현할 수 있습니다.

    • PreferedCustomers <1-----*> Orders

    • CreditRiskCustomers <1-----*> CreditReports

  • 일 대 다 연결에서 연결의 "일" 쪽에 있는 엔터티 집합은 "다" 쪽에서 MEST로 구현된 엔터티와 관계를 가질 수 있습니다. 예를 들어 Product 엔터티는 두 엔터티 집합에 포함되고 ManufacturingUnit 엔터티와 연결될 수 있습니다.

    • ManufacturingUnit <1-----*> Products

    • ManufacturingUnit <1----*> DefectiveProducts

"일 대 일" 또는 "다 대 다" 시나리오에서는 논리적 모델을 디자인하거나 논리적 모델을 개념적 모델에 매핑하는 경우 MEST를 구현하기가 어렵습니다. 일 대 일 및 다 대 다 MEST의 문제점은 "일" 쪽의 MEST가 "다" 쪽에 있는 동일한 엔터티 집합과 관계를 가지고 있는 경우와 같습니다. 일 대 일의 경우 일 대 다와 마찬가지로 논리적 모델을 만들 수 있습니다.

  • 다음과 같은 주문 시나리오에서 논리적 모델을 디자인할 때 이러한 문제가 있을 수 있습니다.

    • PreferedCustomers <1-----*> Orders

    • CreditRiskCustomers <1-----*> Orders

자세한 내용은 방법: 유형별 다중 엔터티 집합으로 모델 정의(Entity Framework)를 참조하십시오.

참고 항목

개념

Association(EDM)
연결 집합(EDM)
엔터티 컨테이너(EDM)
엔터티 데이터 모델 형식
단순 형식(EDM)

기타 리소스

스키마 및 매핑 사양(Entity Framework)