다음을 통해 공유


저장소 모델에 개념적 모델 매핑

Entity Framework 에서는 개념적 모델을 사용하여 엔터티 형식 및 연결로 표현되는 데이터의 개체 중심 뷰를 제공합니다. 따라서 응용 프로그램 개발자는 개념적 모델을 기반으로 생성된 클래스에 대한 프로그래밍만 생각하면 되고, 데이터 저장소의 개체에 액세스하여 이를 프로그래밍 개체로 변환하는 방법과 저장소 스키마에 대해서는 고려하지 않아도 됩니다. Entity Framework 에서는 개념적 모델, 저장소 모델 및 이러한 두 모델 간 매핑을 사용하여 엔터티에 대한 만들기, 읽기, 업데이트 및 삭제 작업을 데이터 소스의 동등한 작업으로 변환합니다.

Bb399232.note(ko-kr,VS.100).gif참고:
이 단원에 나오는 모든 매핑 파일 조각은 Entity Data Model Wizard에 의해 생성됩니다.

개념적 모델

응용 프로그램에 대한 개념적 모델은 Entity Data Model 구현인 CSDL(개념적 스키마 정의 언어)의 엔터티 및 관계를 나타냅니다. CSDL은 XML 기반 언어입니다. CSDL로 정의된 엔터티 형식은 각각 이름이 있으며 고유 식별 인스턴스에 대한 키와 속성 집합도 가지고 있습니다. 속성에 할당된 데이터 형식은 단순 형식(스칼라 속성)이나 복합 형식(하나 이상의 스칼라 속성이나 복합 속성으로 구성)으로 지정됩니다. 또한 XML 특성은 null 허용 여부를 지정하거나 기본값을 할당할 수 있습니다. 연결은 엔터티 간의 관계를 정의합니다. Entity Framework 언어 요소 및 용어에 대한 자세한 내용은 Entity Framework 용어를 참조하십시오.

다음 XML 조각은 School 예제 데이터베이스를 기반으로 하는 School 개념적 모델의 일부를 나타냅니다. 이 예제에서는 다른 엔터티 및 연결은 제거된 상태에서 FK_Course_Department 연결을 통해 관련 CourseDepartment 엔터티 형식을 보여 줍니다.

<Schema Namespace="SchoolModel" Alias="Self" 
xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation" 
      xmlns="https://schemas.microsoft.com/ado/2008/09/edm">
  <EntityContainer Name="SchoolEntities">
   <EntitySet Name="Courses" EntityType="SchoolModel.Course" />
   <EntitySet Name="Departments" EntityType="SchoolModel.Department" />

  <AssociationSet Name="FK_Course_Department" 
                  Association="SchoolModel.FK_Course_Department">
            <End Role="Department" EntitySet="Departments" />
            <End Role="Course" EntitySet="Courses" />
  </AssociationSet>

  </EntityContainer>
  <EntityType Name="Course">
       <Key>
         <PropertyRef Name="CourseID" />
       </Key>
       <Property Name="CourseID" Type="Int32" Nullable="false" />
       <Property Name="Title" Type="String" Nullable="false" 
                 MaxLength="100" Unicode="true" FixedLength="false" />
       <Property Name="Credits" Type="Int32" Nullable="false" />
       <Property Name="DepartmentID" Type="Int32" Nullable="false" />
       <NavigationProperty Name="Department" 
                       Relationship="SchoolModel.FK_Course_Department" 
                       FromRole="Course" ToRole="Department" />
  </EntityType>

  <EntityType Name="Department">
       <Key>
         <PropertyRef Name="DepartmentID" />
       </Key>
       <Property Name="DepartmentID" Type="Int32" Nullable="false" />
       <Property Name="Name" Type="String" Nullable="false" 
                 MaxLength="50" Unicode="true" FixedLength="false" />
       <Property Name="Budget" Type="Decimal" Nullable="false" 
                 Precision="19" Scale="4" />
       <Property Name="StartDate" Type="DateTime" Nullable="false" />
       <Property Name="Administrator" Type="Int32" />
       <NavigationProperty Name="Courses" 
                       Relationship="SchoolModel.FK_Course_Department" 
                       FromRole="Department" ToRole="Course" />
  </EntityType>
       
  <Association Name="FK_Course_Department">
    <End Role="Department" Type="SchoolModel.Department" 
         Multiplicity="1" />
    <End Role="Course" Type="SchoolModel.Course" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Department">
              <PropertyRef Name="DepartmentID" />
            </Principal>
            <Dependent Role="Course">
              <PropertyRef Name="DepartmentID" />
            </Dependent>
          </ReferentialConstraint>
        </Association>

      </Schema>

저장소 모델

저장소 모델은 SSDL(저장소 스키마 정의 언어)로 설명됩니다. SSDL에 선언된 속성의 데이터 형식은 저장소 모델의 데이터 형식입니다. 이 저장소 모델 조각에서는 다른 엔터티는 제거된 상태에서 FK_Course_Department 외래 키를 통해 연관된 School 데이터베이스의 CourseDepartment 테이블에 대한 저장소 메타데이터 예제를 보여 줍니다.

<Schema Namespace="SchoolModel.Store" Alias="Self" 
        Provider="System.Data.SqlClient" ProviderManifestToken="2005" 
       xmlns:store="https://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" 
       xmlns="https://schemas.microsoft.com/ado/2009/02/edm/ssdl">
  <EntityContainer Name="SchoolModelStoreContainer">
   <EntitySet Name="Course" EntityType="SchoolModel.Store.Course" 
              store:Type="Tables" Schema="dbo" />
   <EntitySet Name="Department" 
              EntityType="SchoolModel.Store.Department" 
              store:Type="Tables" Schema="dbo" />

    <AssociationSet Name="FK_Course_Department" 
                  Association="SchoolModel.Store.FK_Course_Department">
            <End Role="Department" EntitySet="Department" />
            <End Role="Course" EntitySet="Course" />
    </AssociationSet>

  </EntityContainer>

  <EntityType Name="Course">
       <Key>
         <PropertyRef Name="CourseID" />
       </Key>
       <Property Name="CourseID" Type="int" Nullable="false" />
       <Property Name="Title" Type="nvarchar" Nullable="false" 
                 MaxLength="100" />
       <Property Name="Credits" Type="int" Nullable="false" />
       <Property Name="DepartmentID" Type="int" Nullable="false" />
  </EntityType>

  <EntityType Name="Department">
       <Key>
         <PropertyRef Name="DepartmentID" />
       </Key>
       <Property Name="DepartmentID" Type="int" Nullable="false" />
       <Property Name="Name" Type="nvarchar" Nullable="false" 
                 MaxLength="50" />
       <Property Name="Budget" Type="money" Nullable="false" />
       <Property Name="StartDate" Type="datetime" Nullable="false" />
       <Property Name="Administrator" Type="int" />
  </EntityType>

  <Association Name="FK_Course_Department">
       <End Role="Department" Type="SchoolModel.Store.Department" 
            Multiplicity="1" />
       <End Role="Course" Type="SchoolModel.Store.Course" 
            Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Department">
              <PropertyRef Name="DepartmentID" />
            </Principal>
            <Dependent Role="Course">
              <PropertyRef Name="DepartmentID" />
            </Dependent>
          </ReferentialConstraint>
        </Association>
        
</Schema>

매핑 사양

매핑 사양에서는 MSL(매핑 사양 언어)을 사용하여 개념적 모델을 저장소 모델에 매핑합니다. 다음 MSL 조각에서는 School 모델의 CourseDepartment 엔터티에 대한 개념적 모델과 저장소 모델 간의 일대일 매핑을 보여 줍니다.

<Mapping Space="C-S" 
          xmlns="https://schemas.microsoft.com/ado/2008/09/mapping/cs">
  <EntityContainerMapping 
                 StorageEntityContainer="SchoolModelStoreContainer" 
                 CdmEntityContainer="SchoolEntities">
    <EntitySetMapping Name="Courses">
     <EntityTypeMapping TypeName="SchoolModel.Course">
      <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
      </MappingFragment>
     </EntityTypeMapping>
    </EntitySetMapping>
    <EntitySetMapping Name="Departments">
     <EntityTypeMapping TypeName="SchoolModel.Department">
      <MappingFragment StoreEntitySet="Department">
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       <ScalarProperty Name="Name" ColumnName="Name" />
       <ScalarProperty Name="Budget" ColumnName="Budget" />
       <ScalarProperty Name="StartDate" ColumnName="StartDate" />
       <ScalarProperty Name="Administrator" 
                       ColumnName="Administrator" />
      </MappingFragment>
     </EntityTypeMapping>
    </EntitySetMapping>
   </EntityContainerMapping>
</Mapping>

추가 설명

여기서 설명한 School 모델에서는 개념적 엔터티와 데이터베이스 테이블 간의 단순 일대일 매핑을 사용하지만, Entity Framework 에서는 계층당 하나의 테이블 매핑 또는 형식당 하나의 매핑과 같은 더 복잡한 매핑이 지원됩니다. 자세한 내용은 Entity Data Model Tools Scenarios고급 데이터 모델 정의(Entity Framework 작업)를 참조하십시오.

참고 항목

개념

Entity Framework 용어

기타 리소스

시작(Entity Framework)
고급 데이터 모델 정의(Entity Framework 작업)
CSDL, SSDL 및 MSL 사양