다음을 통해 공유


QueryView 요소(EntitySetMapping)

EDM(엔터티 데이터 모델)에서 EntitySetMappingQueryView 요소는 개념적 모델의 엔터티와 저장소 모델의 엔터티 간에 읽기 전용 매핑을 정의합니다. 저장소 모델을 기준으로 평가되는 Entity SQL 쿼리를 사용하여 이 쿼리 뷰 매핑을 정의하고, 개념적 모델의 엔터티를 기준으로 결과 집합을 표시합니다. 쿼리 뷰는 읽기 전용이므로 표준 업데이트 명령을 사용하여 쿼리 뷰에서 정의된 형식을 업데이트할 수 없습니다. 수정 함수를 사용하여 이러한 형식을 업데이트할 수 있습니다. 자세한 내용은 방법: 저장 프로시저에 수정 함수 매핑을 참조하십시오.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

다음 예제에서는 AdventureWorks Sales 모델의 Product 엔터티 형식에 대한 쿼리 뷰를 정의합니다.

<EntitySetMapping Name="Product">
  <QueryView>
      SELECT VALUE AdventureWorksModel.Product(P.ProductID,
      P.Name, P.ProductNumber, P.Color, P.ListPrice, P.Size, P.Weight,
      P.Style)
      FROM Person.Product as P
  </QueryView>
</EntitySetMapping>

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

  <EntityType Name="Product">
  <Key>
    <PropertyRef Name="ProductID" />
  </Key>
  <Property Name="ProductID" Type="Int32" Nullable="false" />
  <Property Name="Name" Type="String" Nullable="false" MaxLength="50" Unicode="true" FixedLength="false" />
  <Property Name="ProductNumber" Type="String" Nullable="false" MaxLength="25" Unicode="true" FixedLength="false" />
  <Property Name="Color" Type="String" MaxLength="15" Unicode="true" FixedLength="false" />
  <Property Name="ListPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
  <Property Name="Size" Type="String" MaxLength="5" Unicode="true" FixedLength="false" />
  <Property Name="Weight" Type="Decimal" Precision="8" Scale="2" />
  <Property Name="Style" Type="String" MaxLength="2" Unicode="true" FixedLength="true" />
</EntityType>

이 예제에서 AdventureWorks Sales 모델 샘플의 저장소 모델에 있는 Product 형식은 변경되지 않았습니다.

참고 항목

개념

엔터티 데이터 모델 매핑 시나리오(응용 프로그램 시나리오)
EntitySetMapping 요소(MSL)