엔터티 구현(EDM)

모든 EDM(엔터티 데이터 모델) 응용 프로그램에서는 엔터티가 CSDL(개념 스키마 정의 언어)로 정의된 다음 SSDL(저장소 스키마 정의 언어)로 데이터 구조를 정의하는 메타데이터에 매핑됩니다. 이 예제에서는 단일 엔터티의 디자인을 보여 주고 엔터티가 저장소에 매핑되는 방법을 보여 줍니다.

이 예제 엔터티가 디자인된 응용 프로그램에서는 기업의 직원에 대한 정보를 정의합니다.

개념 스키마

다음 CSDL(개념 스키마 정의 언어) 구문에 정의된 엔터티에는 Employes라는 Namespace에 데이터 형식에 대한 사양이 있습니다. Namespace에는 다음과 같은 하나의 EntityType 선언이 있습니다. Employees.

Employees 엔터티의 속성은 직원을 식별하는 기본 정보를 포함합니다. EmployeeId 속성은 형식의 인스턴스를 고유하게 식별하는 Guid로 선언됩니다. EmployeeId 속성에는 Key 태그가 지정됩니다.

세 개의 추가 속성이 FirstName, LastName, Email 주소를 기준으로 직원을 식별합니다.

CSDL 스키마에는 엔터티 사양뿐 아니라 EntitySetEntityContainer 선언도 들어 있습니다. EntityContainerEntitySet 사양은 데이터 모델에 있는 데이터 형식의 범위를 정의합니다. EntityContainer에는 EntitySet이 포함됩니다. 이 예제에서 Employees라는 EntitySet에는 Employee 형식이 포함됩니다.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees" Alias="Self" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="EmployeesContext">
    <EntitySet Name="Employees" EntityType="Employees.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>
</Schema>

Namespace 스키마에는 Namespace 스키마에 독립적인 별도의 EntityContainer를 제외한 모든 집합과 Employee 엔터티가 포함됩니다. EntityContainer에 대한 자세한 내용은 EntityContainerMapping 요소(MSL)을 참조하십시오.

이 데이터 모델을 기반으로 하는 응용 프로그램은 이 모델을 기반으로 하는 클래스를 사용하기 위해 Namespace를 참조합니다.

이 CSDL 사양을 개념 스키마 또는 디자인 스키마라고 합니다. SSDL 구문의 저장소 메타데이터에 있는 병렬 엔터티 이름은 저장소 구조에 해당합니다. 이 CSDL 스키마의 EntitySet은 SSDL 스키마에 지정된 테이블의 이름에 해당합니다. 이 테이블은 모델을 기반으로 하는 응용 프로그램에 사용되는 Employee 엔터티의 인스턴스에 대한 데이터를 포함합니다. Employee 엔터티의 속성은 테이블의 열에 해당합니다.

저장소 스키마

SSDL의 저장소 메타데이터는 개념 스키마에 정의된 Employees의 인스턴스가 포함된 데이터베이스를 정의합니다.

다음 스키마에 정의된 Employees.Store 네임스페이스는 개념 스키마에 정의된 Employees 모델의 대상 데이터베이스입니다.

이 스키마의 EntitySetEmployeesEmployees라는 데이터 테이블을 나타냅니다. 이 스키마에서 지정된 EntityType은 개념 스키마에 정의된 EntityType에 해당합니다. 저장소 메타데이터에 있는 이름은 개념 스키마에 있는 이름과 일치하지 않아도 되지만 데이터베이스 테이블의 이름과는 일치해야 합니다.

다음 스키마에서는 SSDL 파일에 지정된 EntityContainer가 나타내는 데이터베이스 개체 dbo에 대해 설명합니다. 이 예제의 EntityContainerEmployees 테이블을 포함합니다.

?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees.Store" Alias="Self"
    Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
  <EntityContainer Name="dbo">
    <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false" />
    <Property Name="Email" Type="nvarchar" Nullable="false" />
  </EntityType>
</Schema>

매핑 사양

매핑 사양은 MSL(매핑 사양 언어)로 정의됩니다. 이 MSL 사양은 SSDL 스키마의 메타데이터를 사용하여 CSDL 스키마를 데이터베이스에 연결합니다.

이 MSL 스키마의 요소에는 EntityContainerMapping, StorageEntityContainer, EntityTypeMapping, MappingFragmentScalarProperty 매핑이 포함됩니다. EntityContainerMappingCdmEntityContainerStorageEntityContainer에 매핑합니다. 이 경우에서는 EmployeeSkills 엔터티 컨테이너를 데이터베이스 개체 dbo에 매핑합니다.

StorageEntityContainerCdmEntityContainer에 할당된 이름은 스키마 네임스페이스로 정규화되지 않습니다. StorageEntityContainerCdmEntityContainer는 서로 별개이며, 개념 스키마 및 저장소 메타데이터에서 모두 스키마 요소에 독립적입니다. 네임스페이스 이름을 사용하여 StorageEntityContainerCdmEntityContainer 이름을 정규화하면 매핑 예외가 발생합니다.

****StorageEntityContainerCdmEntityContainer 매핑에 따라 EntitySetMapping은 개념적

TypeName, Employees에 해당하는 StoreEntitySet을 지정합니다.

TypeName의 속성은 ScalarProperty 요소에 의해 ColumnName 요소(예: Name="EmployeeId" ColumnName="EmployeeId")에 해당하는 Name 특성으로 매핑됩니다. Name 구문은 개념 스키마에 있는 엔터티의 속성을 지정하고, ColumnName은 대상 데이터베이스에 있는 Employees 데이터 테이블의 열을 지정합니다.

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
     xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo"
        CdmEntityContainer="EmployeesContext">
    <EntitySetMapping Name="Employees" StoreEntitySet="Employees"
        TypeName="Employees.Employees">

      <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Email" ColumnName="Email" />

    </EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

참고 항목

개념

연결 구현(EDM)

기타 리소스

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