다음을 통해 공유


QueryView 요소(MSL)

MSL(매핑 사양 언어)의 QueryView 요소는 개념적 모델의 엔터티 형식 또는 연결과 기본 데이터베이스의 테이블 간의 읽기 전용 매핑을 정의합니다. 매핑은 저장소 모델에 대해 평가되는 Entity SQL 쿼리를 사용하여 정의되며, 결과 집합이 개념적 모델의 엔터티 또는 연결을 기준으로 표현됩니다. 쿼리 뷰는 읽기 전용이므로 표준 업데이트 명령을 사용하여 쿼리 뷰로 정의된 형식을 업데이트할 수 없습니다. 수정 함수를 사용하여 이러한 형식을 업데이트할 수 있습니다. 자세한 내용은 How to: Map Modification Functions to Stored Procedures을 참조하십시오.

Cc716798.note(ko-kr,VS.100).gif참고:
QueryView 요소에서 GroupBy, 그룹 집계 또는 탐색 속성이 포함된 Entity SQL 식은 지원되지 않습니다.

QueryView 요소는 EntitySetMapping 요소 또는 AssociationSetMapping 요소의 자식일 수 있습니다. 쿼리 뷰는 앞의 자식 요소의 경우 개념적 모델의 엔터티에 대한 읽기 전용 매핑을 정의하고, 뒤의 자식 요소의 경우 개념적 모델의 연결에 대한 읽기 전용 매핑을 정의합니다.

Cc716798.note(ko-kr,VS.100).gif참고:
AssociationSetMapping 요소가 참조 제약 조건이 있는 연결에 대한 것이면 AssociationSetMapping 요소가 무시됩니다.자세한 내용은 ReferentialConstraint 요소(CSDL)를 참조하십시오.

QueryView 요소에는 자식 요소가 있을 수 없습니다.

적용 가능한 특성

다음 표에서는 QueryView 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수 여부

TypeName

아니요

쿼리 뷰에 의해 매핑되는 개념적 모델 형식의 이름입니다.

예제

다음 예제에서는 EntitySetMapping 요소의 자식인 QueryView 요소를 보여 주고 School 모델에서 Department 엔터티 형식에 대한 쿼리 뷰 매핑을 정의합니다.

<EntitySetMapping Name="Departments" >
  <QueryView>
    SELECT VALUE SchoolModel.Department(d.DepartmentID, 
                                        d.Name, 
                                        d.Budget, 
                                        d.StartDate)
    FROM SchoolModelStoreContainer.Department AS d
    WHERE d.Budget > 150000
  </QueryView>
</EntitySetMapping>

쿼리에서 저장소 모델에 있는 Department 형식의 멤버 하위 집합만 반환되므로 다음과 같이 School 모델의 Department 형식이 이 매핑을 기반으로 수정되었습니다.

<EntityType Name="Department">
  <Key>
    <PropertyRef Name="DepartmentID" />
  </Key>
  <Property Type="Int32" Name="DepartmentID" Nullable="false" />
  <Property Type="String" Name="Name" Nullable="false" 
            MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="Decimal" Name="Budget" Nullable="false" 
            Precision="19" Scale="4" />
  <Property Type="DateTime" Name="StartDate" Nullable="false" />
  <NavigationProperty Name="Courses" 
                      Relationship="SchoolModel.FK_Course_Department" 
                      FromRole="Department" ToRole="Course" />
</EntityType>

예제

다음 예제에서는 AssociationSetMapping 요소의 자식인 QueryView 요소를 보여 주고 School 모델에서 FK_Course_Department 연결에 대한 읽기 전용 매핑을 정의합니다.

Cc716798.note(ko-kr,VS.100).gif참고:
연결 집합 매핑이 쿼리 뷰로 정의된 경우 연결의 End에 있는 엔터티 형식에 대한 매핑도 쿼리 뷰로 정의되어야 합니다.

<EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer" 
                        CdmEntityContainer="SchoolEntities">
  <EntitySetMapping Name="Courses" >
    <QueryView>
      SELECT VALUE SchoolModel.Course(c.CourseID, 
                                      c.Title, 
                                      c.Credits)
      FROM SchoolModelStoreContainer.Course AS c
    </QueryView>
  </EntitySetMapping>
  <EntitySetMapping Name="Departments" >
    <QueryView>
      SELECT VALUE SchoolModel.Department(d.DepartmentID, 
                                          d.Name, 
                                          d.Budget, 
                                          d.StartDate)
      FROM SchoolModelStoreContainer.Department AS d
      WHERE d.Budget > 150000
    </QueryView>
  </EntitySetMapping>
  <AssociationSetMapping Name="FK_Course_Department" >
    <QueryView>
      SELECT VALUE SchoolModel.FK_Course_Department(
        CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
        CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
      FROM SchoolModelStoreContainer.Course AS c
    </QueryView>
  </AssociationSetMapping>
</EntityContainerMapping>

설명

다음 시나리오가 가능하도록 쿼리 뷰를 정의할 수 있습니다.

  • 저장소 모델에 있는 엔터티의 모든 속성을 포함하지 않는 엔터티를 개념적 모델에서 정의합니다. 여기에는 기본값이 없고 null 값을 지원하지 않는 속성도 포함됩니다.

  • 저장소 모델의 계산 열을 개념적 모델의 엔터티 형식 속성에 매핑합니다.

  • 개념적 모델의 엔터티를 분할하는 데 사용된 조건이 같음을 기반으로 하지 않는 매핑을 정의합니다. Condition 요소를 사용하여 조건부 매핑을 지정하는 경우 제공된 조건이 지정한 값과 같아야 합니다. 자세한 내용은 Condition 요소(MSL)를 참조하십시오.

  • 저장소 모델의 같은 열을 개념적 모델의 여러 형식에 매핑합니다.

  • 여러 형식을 같은 테이블에 매핑합니다.

  • 관계형 스키마에서 외래 키를 기반으로 하지 않는 연결을 개념적 모델에서 정의합니다.

  • 사용자 지정 비즈니스 논리를 사용하여 개념적 모델에서 속성 값을 설정합니다. 예를 들어 데이터 소스의 문자열 값 "T"를 개념적 모델의 true 값(부울)에 매핑할 수 있습니다.

  • 쿼리 결과에 대한 조건부 필터를 정의합니다.

  • 저장소 모델보다 더 적은 제한을 개념적 모델의 데이터에 대해 적용합니다. 예를 들어 매핑된 열에서 null 값을 지원하지 않는 경우에도 개념적 모델의 속성이 Null을 허용하도록 만들 수 있습니다.

엔터티에 대한 쿼리 뷰를 정의할 때는 다음 사항을 고려해야 합니다.

  • 쿼리 뷰는 읽기 전용입니다. 수정 함수를 사용하여 엔터티를 업데이트할 수만 있습니다.

  • 쿼리 뷰로 엔터티 형식을 정의하는 경우 관련된 모든 엔터티도 쿼리 뷰로 정의해야 합니다.

  • 관계형 스키마의 링크 테이블을 나타내는 저장소 모델의 엔터티에 다대다 연결을 매핑하는 경우 AssociationSetMapping 요소에 이 링크 테이블에 대한 QueryView 요소를 정의해야 합니다.

  • 쿼리 뷰는 형식 계층 구조의 모든 형식에 대해 정의되어야 합니다. 다음과 같은 방법으로 이 작업을 수행할 수 있습니다.

    • 계층 구조에 있는 모든 엔터티 형식의 합집합을 반환하는 단일 Entity SQL 쿼리를 지정하는 단일 QueryView 요소 사용

    • CASE 연산자를 사용하여 특정 조건에 따라 계층 구조의 특정 엔터티 형식을 반환하는 단일 Entity SQL 쿼리를 지정하는 단일 QueryView 요소 사용

    • 계층 구조의 특정 형식에 대한 추가 QueryView 요소 사용. 이 경우 QueryView 요소의 TypeName 특성을 사용하여 각 뷰의 엔터티 형식을 지정합니다.

  • 쿼리 뷰를 정의할 때 EntitySetMapping 요소의 StorageSetName 특성을 지정할 수 없습니다.

  • 쿼리 뷰를 정의할 때 EntitySetMapping 요소에 Property 매핑도 포함될 수는 없습니다.

참고 항목

개념

EntitySetMapping 요소(MSL)
AssociationSetMapping 요소(MSL)

기타 리소스

CSDL, SSDL 및 MSL 사양
모델링 및 매핑(Entity Framework)