다음을 통해 공유


방법: 두 테이블에 매핑된 단일 엔터티를 사용하여 모델 정의

이 항목에서는 엔터티 형식이 기본 데이터베이스의 두 테이블에 매핑되는 개념적 모델을 수동으로 만드는 방법을 설명합니다. 이러한 동일한 개념을 사용하여 엔터티 형식을 세 개 이상의 테이블에 매핑할 수 있습니다.

Bb896233.note(ko-kr,VS.100).gif참고:
여러 테이블에 매핑된 엔터티 형식을 사용하여 모델을 정의하려면 ADO.NET Entity Data Model Tools를 사용하는 것이 좋습니다.자세한 내용은 Walkthrough: Mapping an Entity to Multiple Tables을 참조하십시오.

다음 조건에 해당하는 경우에만 엔터티 형식을 여러 테이블에 매핑해야 합니다.

  • 매핑할 테이블이 공통 키를 공유합니다.

  • 매핑될 엔터티 형식의 항목이 각 기본 테이블에 있습니다. 즉, 엔터티 형식은 두 테이블 간에 일대일로 일치하는 데이터를 나타냅니다. 엔터티 형식은 두 테이블의 내부 조인을 나타냅니다.

두 테이블에 매핑된 엔터티를 사용하여 모델을 수동으로 정의하는 기본 단계는 다음과 같습니다.

  1. 각 기본 테이블의 열에 해당하는 속성을 사용하여 엔터티 형식을 정의합니다. 자세한 내용은 EntityType 요소(CSDL)를 참조하십시오.

  2. 각 기본 테이블에 MappingFragment 요소를 사용하여 엔터티 형식에 대한 매핑을 정의합니다. 자세한 내용은 EntityTypeMapping 요소(MSL)MappingFragment 요소(MSL)를 참조하십시오.

다음 예제에서는 School 샘플 데이터베이스를 설치하고 Entity Framework 를 사용하도록 프로젝트를 수동으로 구성했다고 가정합니다. 자세한 내용은 School 샘플 데이터베이스 만들기(Entity Framework 퀵 스타트)Entity Framework 구성(Entity Framework 작업)을 참조하십시오.

Bb896233.note(ko-kr,VS.100).gif참고:
아래의 예제에서는 엔터티 형식을 School 샘플 데이터베이스의 PersonOfficeAssignement 테이블에 매핑합니다.이러한 테이블에 엔터티 형식을 매핑하기 위한 조건이 충족되었습니다.즉, 두 테이블의 내부 조인 결과는 직무가 할당된 모든 사람입니다.

저장소 모델을 만들려면

  1. 다음 XML 파일을 프로젝트에 추가하고 이름을 School.ssdl로 지정합니다.

    <Schema Namespace="SchoolModel.Store" Alias="Self" Provider="System.Data.SqlClient" 
            ProviderManifestToken="2008" 
            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="OfficeAssignment" EntityType="SchoolModel.Store.OfficeAssignment" 
                   store:Type="Tables" Schema="dbo" />
        <EntitySet Name="Person" EntityType="SchoolModel.Store.Person" 
                   store:Type="Tables" Schema="dbo" />
      </EntityContainer>
      <EntityType Name="OfficeAssignment">
        <Key>
          <PropertyRef Name="InstructorID" />
        </Key>
        <Property Name="InstructorID" Type="int" Nullable="false" />
        <Property Name="Location" Type="nvarchar" Nullable="false" MaxLength="50" />
        <Property Name="Timestamp" Type="timestamp" Nullable="false" 
                  StoreGeneratedPattern="Computed" />
      </EntityType>
      <EntityType Name="Person">
        <Key>
          <PropertyRef Name="PersonID" />
        </Key>
        <Property Name="PersonID" Type="int" Nullable="false" 
                  StoreGeneratedPattern="Identity" />
        <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
        <Property Name="FirstName" Type="nvarchar" Nullable="false" MaxLength="50" />
        <Property Name="HireDate" Type="datetime" />
        <Property Name="EnrollmentDate" Type="datetime" />
      </EntityType>
    </Schema>
    

개념적 모델을 만들려면

  1. 다음 XML 파일을 프로젝트에 추가하고 이름을 School.csdl로 지정합니다. 다음 사항을 참고하십시오.

    • Instructor 엔터티 형식에는 PersonOfficeAssignment 테이블의 모든 열에 매핑되는 속성이 있습니다. 테이블에 대한 정보는 위의 저장소 모델을 참조하십시오.

      Bb896233.note(ko-kr,VS.100).gif참고:
      Instructor 엔터티 형식은 상속된 형식이기 때문에 기본 형식인 Person에서 모든 속성을 상속합니다.Instructor 엔터티 형식에는 Instructor 형식에 고유한 속성과 함께 기본 테이블의 모든 열에 매핑되는 속성이 있습니다.

    <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" annotation:LazyLoadingEnabled="true">
        <EntitySet Name="People" EntityType="SchoolModel.Person" />
      </EntityContainer>
      <EntityType Name="Person">
        <Key>
          <PropertyRef Name="PersonID" />
        </Key>
        <Property Type="Int32" Name="PersonID" Nullable="false" 
                  annotation:StoreGeneratedPattern="Identity" />
        <Property Type="String" Name="LastName" Nullable="false" 
                  MaxLength="50" FixedLength="false" Unicode="true" />
        <Property Type="String" Name="FirstName" Nullable="false" 
                  MaxLength="50" FixedLength="false" Unicode="true" />
        <Property Type="DateTime" Name="EnrollmentDate" />
      </EntityType>
      <EntityType Name="Instructor" BaseType="SchoolModel.Person" >
        <Property Type="DateTime" Name="HireDate" Nullable="false" />
        <Property Type="Binary" Name="Timestamp" Nullable="false" 
                  MaxLength="8" FixedLength="true" 
                  annotation:StoreGeneratedPattern="Computed" />
        <Property Type="String" Name="Location" Nullable="false" 
                  MaxLength="50" FixedLength="false" Unicode="true" />
      </EntityType>
    </Schema>
    

개념적 모델과 저장소 모델 간의 매핑을 정의하려면

  1. 다음 XML 파일을 프로젝트에 추가하고 이름을 School.msl로 지정합니다. 다음 사항을 참고하십시오.

    • Instructor 엔터티 형식의 EntityTypeMapping 요소 안에서 별도의 MappingFragment 요소가 속성을 적절한 테이블에 매핑하는 데 사용됩니다.
    <Mapping Space="C-S" xmlns="https://schemas.microsoft.com/ado/2008/09/mapping/cs">
        <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer" 
                                CdmEntityContainer="SchoolEntities">
          <EntitySetMapping Name="People">
            <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID" />
                <ScalarProperty Name="HireDate" ColumnName="HireDate" />
                <Condition ColumnName="HireDate" IsNull="false" />
              </MappingFragment>
              <MappingFragment StoreEntitySet="OfficeAssignment">
                <ScalarProperty Name="PersonID" ColumnName="InstructorID" />
                <ScalarProperty Name="Timestamp" ColumnName="Timestamp" />
                <ScalarProperty Name="Location" ColumnName="Location" />
              </MappingFragment>
            </EntityTypeMapping>
            <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>
        </EntityContainerMapping>
    </Mapping>
    

참고 항목

기타 리소스

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