다음을 통해 공유


방법: 정의 쿼리 추가(Entity Framework)

이 항목에서는 정의 쿼리 및 해당 개념적 엔터티 형식을 .edmx 파일에 추가하는 방법에 대해 설명합니다. 정의 쿼리를 통해 .edmx 파일의 DefiningQuery 요소에 지정된 SQL 문을 실행할 수 있습니다. 자세한 내용은 DefiningQuery Element (EntitiContainer SSDL)를 참조하십시오. 일반적으로 정의 쿼리는 데이터베이스 뷰에서 제공하는 기능과 유사한 기능을 제공하는 데 사용되지만 뷰는 데이터베이스가 아닌 .edmx 파일에 정의됩니다. 개념적 엔터티 형식은 개념적 계층의 정의 쿼리에 의해 노출되는 데이터를 표시하는 데 사용됩니다.

Cc982038.note(ko-kr,VS.100).gif참고:
모델 업데이트 마법사를 실행하면 정의 쿼리를 포함하여 저장소 모델에 대한 모든 변경 내용을 덮어씁니다.

매개 변수가 있는 쿼리를 정의 쿼리로 실행할 수 없습니다. 기본적으로 정의 쿼리를 사용하여 표시되는 데이터는 읽기 전용 데이터입니다. 그러나 데이터는 저장 프로시저에 데이터를 표시하는 엔터티 형식의 삽입, 업데이트 및 삭제 함수를 매핑하여 업데이트할 수 있습니다. 자세한 내용은 방법: 저장 프로시저에 수정 함수 매핑연습: 저장 프로시저에 엔터티 매핑을 참조하십시오.

다음 절차에서는 정의 쿼리 및 개념적 엔터티 형식을 .edmx 파일에 추가하는 방법에 대해 간단히 설명합니다. 절차 다음에 나오는 예제에서는 절차의 단계를 보다 자세히 설명합니다.

이러한 절차에서는 올바른 .edmx 파일이 Visual Studio에서 열려 있다고 가정합니다.

정의 쿼리 추가

정의 쿼리를 추가하려면

  1. EntitySet 요소를 .edmx 파일의 SSDL 섹션에 추가합니다. EntitySet 요소의 NameEntityType 특성만 지정합니다. 자세한 내용은 EntitySet Element (EntityContainer SSDL)를 참조하십시오.

  2. 새로 추가된 EntitySet 요소에 DefiningQuery 요소를 추가합니다. DefiningQuery 요소의 본문에서 실행할 SQL 문을 지정합니다. 자세한 내용은 DefiningQuery Element (EntitiContainer SSDL)를 참조하십시오.

  3. EntityType 요소를 .edmx 파일의 SSDL 섹션에 추가합니다. EntityType 요소는 DefiningQuery 요소의 SQL 문에서 반환되는 열에 대해 설명해야 합니다. 자세한 내용은 EntityType Element (SSDL)를 참조하십시오.

개념적 모델에 엔터티 형식 추가

개념적 엔터티 형식을 추가하려면

  1. EntitySet 요소를 .edmx 파일의 CSDL 섹션에 추가합니다. 자세한 내용은 EntitySet Element (EntityContainer CSDL)를 참조하십시오.

  2. EntityType 요소를 .edmx 파일의 CSDL 섹션에 추가합니다. Name 특성 값은 위 단계에서 EntitySet 요소의 Name 특성 값과 같아야 합니다. 엔터티 형식의 속성은 위 절차의 DefiningQuery 요소에 지정된 SQL 문에서 반환된 데이터로 매핑되어야 합니다. 자세한 내용은 EntityType Element (CSDL)를 참조하십시오.

개념적 엔터티 형식 및 저장소 엔터티 형식 매핑

개념적 엔터티 형식 및 저장소 엔터티 형식을 매핑하려면

  1. 위의 두 절차에서 개념적 엔터티 및 저장소 엔터티를 매핑하는 .edmx 파일의 매핑 섹션에 EntitySetMapping 요소를 추가합니다. 자세한 내용은 EntitySetMapping Element (MSL)Mapping a Conceptual Model to a Storage Schema을 참조하십시오.

예제

다음 예제에서는 GradeReport 엔터티 형식을 사용하여 학생 점수 정보를 표시하기 위해 School.edmx 파일에 정의 쿼리를 추가합니다. School.edmx 파일은 Entity Framework QuickstartSchool 엔터티 데이터 모델 생성 항목에 나오는 단계를 수행하여 생성할 수 있습니다.

정의 쿼리를 추가하려면 먼저 DefiningQuery 요소를 포함하는 다음 EntitySet 요소를 .edmx 파일의 SSDL 섹션에 추가합니다. 다음 사항을 참고하십시오.

  • EntitySet 요소의 NameEntityType 특성만 지정합니다.

  • 엔터티 형식의 정규화된 이름은 EntityType 특성에 사용됩니다.

  • 실행할 SQL 문은 DefiningQuery 요소에서 지정합니다.

<EntitySet Name="GradeReport"
 EntityType="SchoolModel.Store.GradeReport" >
  <DefiningQuery>
    SELECT CourseID, Grade, FirstName, LastName
    FROM StudentGrade
    JOIN
    (SELECT * FROM Person WHERE EnrollmentDate IS NOT NULL) AS p
    ON StudentID = p.PersonID
  </DefiningQuery>
</EntitySet>

그리고 나서 다음 EntityType 요소를 .edmx 파일의 SSDL 섹션에 추가합니다. 다음 사항을 참고하십시오.

  • 엔터티 형식의 정규화된 이름이 EntityType 특성에서 사용되지만 Name 특성 값은 위의 EntitySet 요소에 있는 EntityType 특성 값에 해당됩니다.

  • 속성 이름은 위 DefiningQuery 요소의 SQL 문에서 반환되는 열 이름에 해당됩니다.

  • 이 예제에서 엔터티 키는 고유 키 값을 보장하는 세 개의 속성으로 구성되어 있습니다.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="int"
            Nullable="false" />
  <Property Name="Grade"
            Type="decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
  <Property Name="LastName"
            Type="nvarchar"
            Nullable="false"
            MaxLength="50" />
</EntityType>

엔터티 형식을 개념적 모델에 추가하려면 먼저 다음 EntitySet 요소를 .edmx 파일의 CSDL 섹션에 추가합니다. 엔터티 형식의 정규화된 이름은 EntityType 특성에 사용됩니다.

<EntitySet Name="GradeReport" EntityType="SchoolModel.GradeReport" />

그리고 나서 다음 EntityType 요소를 .edmx 파일의 CSDL 섹션에 추가합니다. 다음 사항을 참고하십시오.

  • 엔터티 형식의 정규화된 이름이 EntityType 특성에서 사용되지만 Name 특성 값은 위의 EntitySet 요소에 있는 EntityType 특성 값에 해당됩니다.

  • 속성 이름은 위 DefiningQuery 요소의 SQL 문에서 반환되는 열 이름에 해당됩니다.

  • 이 예제에서 엔터티 키는 고유 키 값을 보장하는 세 개의 속성으로 구성되어 있습니다.

<EntityType Name="GradeReport">
  <Key>
    <PropertyRef Name="CourseID" />
    <PropertyRef Name="FirstName" />
    <PropertyRef Name="LastName" />
  </Key>
  <Property Name="CourseID"
            Type="Int32"
            Nullable="false" />
  <Property Name="Grade"
            Type="Decimal"
            Precision="3"
            Scale="2" />
  <Property Name="FirstName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
  <Property Name="LastName"
            Type="String"
            Nullable="false"
            MaxLength="50"
            Unicode="true"
            FixedLength="false" />
</EntityType>

개념적 엔터티 형식 및 저장소 엔터티 형식을 매핑하려면 다음 EntitySetMapping 요소를 .edmx 파일의 매핑 섹션에 추가합니다.

<EntitySetMapping Name="GradeReport">
  <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.GradeReport)">
    <MappingFragment StoreEntitySet="GradeReport">
      <ScalarProperty Name="CourseID" ColumnName="CourseID" />
      <ScalarProperty Name="Grade" ColumnName="Grade" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
    </MappingFragment>
  </EntityTypeMapping>
</EntitySetMapping>

이제 GradeReport 엔터티 형식이 School 모델에 추가됩니다. GradeReport 엔터티 형식을 통해 표시되는 데이터는 읽기 전용입니다.

참고 항목

개념

.edmx 파일 개요(Entity Framework)

기타 리소스

.edmx 파일 수동 편집(Entity Framework)