QueryView 요소(EntitySetMapping)
EDM(엔터티 데이터 모델)에서 EntitySetMapping의 QueryView 요소는 개념적 모델의 엔터티와 저장소 모델의 엔터티 간에 읽기 전용 매핑을 정의합니다. 저장소 모델을 기준으로 평가되는 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 형식은 변경되지 않았습니다.