2013-02-01 1 views
1

내가 언급 한대로 in my last question, Alex D James의 우수한 3 년 된 WCF 데이터 서비스 사용자 지정 공급자 블로그를 통해 읽었습니다. 관련 데이터에 대한 섹션으로 이동하면 우리는 모든 데이터를 맹목적으로 ResourceTypeKind.EntityType으로 설명합니다. I looked up the documentation이며, ResourceTypeKind.ComplexType 사용에 대한 정의 또는 지침은 없습니다.ResourceTypeKind.ComplexType이란 무엇입니까?

필자는 항상 내 쿼리에 포함되는 비 기본 유형이라고 가정하지만이를 확인하는 내용은 찾을 수 없습니다. 이것은 EF에 사용되는 모델입니다. 나는 그것이 심지어 존재하는 이유라고 생각한다.

제 가정이 맞으면 ResourceTypeKind.EntityTypes과 동일한 방식으로 내 ComplexTypes을 정의합니까? EF ComplexTypes에서와 마찬가지로 WCF Data Services ComplexTypes에 대해 동일한 규칙을 가정 할 수 있습니까?

[편집] WCF 데이터 서비스 a.k.a. OData에서 쿼리하는 것의 의미는 무엇입니까? .Expand (complex) a.k.a. $ expand를 사용할 것으로 예상됩니까? LInQ 및 WCF 데이터 서비스 클라이언트를 사용하는 클라이언트에서 복합 형식을 가져 오기 위해 익명 형식을 만들어야합니까? 클라이언트는 자신이 ComplexType임을 알고 있습니까?

+0

예. 복합 유형에 대한 규칙은 EF 및 WCF 데이터 서비스에서 유사합니다. 복잡한 유형을 구조 유형 (엔티티와 같은)으로 생각할 수 있지만 신원은 없으므로 엔티티 유형과 같이 직접 쿼리 할 수 ​​없습니다. 예 : "주소"라는 복합 유형을 정의하고이 복합 유형의 특성을 엔티티에 가질 수 있습니다. 희망이 도움이됩니다. – Pratik

+0

감사합니다 @Pratik, 이것은 내 가정의 일부를 확인하지만 WCF 데이터 서비스 a.k.a. OData에서 쿼리하는 의미는 무엇입니까? .Expand (complex) a.k.a. $ expand를 사용할 것으로 예상됩니까? LInQ 및 WCF 데이터 서비스 클라이언트를 사용하는 클라이언트에서 복합 형식을 가져 오기 위해 익명 형식을 만들어야합니까? –

답변

2

OData의 복합 유형은 EF의 복합 유형과 매우 유사합니다. OData에 의해 그들은 원자적인 "value"타입으로 취급됩니다. 따라서 응답에는 항상 전체 값이 포함됩니다 (중첩 된 경우에도 계층 구조에 여러 복합 유형이 포함됨).

쿼리 지원의 경우 클라이언트는 단일 값을 요청할 때만 복합 유형을 지정할 수 있습니다. (주소는 고객이 복잡한 유형 인 유형이라고 가정합니다.) 예를 들어 ~/Customers (1)/Address/City는 유효한 쿼리이며 Address 복합 값의 City 속성 만 반환합니다.

값이 원자 단위로 처리되므로 $ expand가 작동하지 않습니다 (탐색 속성에서만 작동하므로 실패합니다). $ select는 작동하지만 전체 전체 속성에만 적용됩니다. 그래서 ~/Customers를 할 수 있습니까? $ select = Address는 모든 고객을 반환하지만 Address 속성 만 사용합니다. 나는 ~/고객을 할 수 없습니까? $ select = 주소/도시 - 그건 무효입니다.

어떤 방식 으로든 복잡한 속성을 "항상 확장 된"것으로 볼 수는 있지만 항목/탐색으로 간주하지 않는 것이 좋습니다.