2011-10-10 2 views
0

수백만 행의 데이터 행이있는 EF (구식 edmx, 코드 우선 제외) 위에 WCF 데이터 서비스가 있습니다. 결과를 500 행으로 제한하고 있습니다. 여태까지는 그런대로 잘됐다!WCF에서 DISTINCT 기능을 제공하는 방법

소비자에게 데이터를 "드릴"할 수있는 기능을 제공하고 싶습니다. 이상적으로 소비자 코드는 select distinct Province from 내 서비스를 실행하고 사용자는 주를 선택하고 코드는 select distinct Zip where Province == p (내 비즈니스 도메인은 매우 다르지만 잘하면 사진을 얻습니다!)을 실행합니다.

당연히 모든 것을 얻을 수없고 클라이언트 측에서 고유하게 실행할 수는 없습니다. 이 서비스를 어떻게 제공합니까? EntitySet "Provinces"또는 "Zips"가 서비스에 노출되어 있지 않습니다. MyEntities 클래스를 확장하고 그 세트를 시뮬레이트하려고합니까? 아니면 Entity Framework에서 자동으로 노출되는 컬렉션 외에도 다른 컬렉션을 노출하는 더 간단한 방법이 있습니까? 나는이 질문이 의미가 희망

...

업데이트 : 난 내가 WCF 서비스를 사용하는 것을 언급 할 때 나는 혼란을 야기 생각합니다. 실제로 WCF를 사용하고 있습니다 데이터 서비스가 Entity Framework 4.1에서 OData 래퍼를 제공하려고합니다. 다행히도, 이것은 질문을 명확히합니다.

+0

왜 DISCTINCT를 여기에서 불러야합니까? 진절머리 나는 databbase 디자인? 우리가 문제를 더 잘 이해할 수있게 해주지 만, Procinve와 같은 성질을 띠게됩니다. Zip은 별개로 많은 시간을 실행할 때 서버 성능을 현명하게 저하시킵니다. – TomTom

+0

백 엔드에서는 관계형 데이터베이스가 아니라 통계 샘플링입니다. 따라서 서버 측에서 select distinct는 매우 빠릅니다 (SAS 내부를 올바르게 이해하면 "Province"에서 파티션되고 파티션에서 "Zip"으로 인덱싱 됨). 따라서 성능이 만족 스럽길 기대합니다. 그럼에도 불구하고 - 사용자는 주/우편 번호를 사용할 수 있는지 확인하고 우편 번호 내에서 결과를 얻어야합니다. 따라서 첫 번째 질문은 성능이 아니라 기능입니다. – Felix

+0

퍼포먼스가 악취가 나기 시작하면 항상 캐시 할 수 있습니다.) – TomTom

답변

0

당신은 아마도 유능한 인물과 표준을 떨어 뜨리는 것을 고려 했습니까?

.NET에서 ODATA를 노출하기가 쉬우 며 사용자가 드릴 다운 할 수 있습니다. 당신이 필요로하는 것은 성 (省)이나 우편 (Zip)과 같은 요소를 노골적인 데이터 모델처럼 노출시키는 변형입니다.)

OData에 대한 좋은 점은 LINQ를 백엔드에 쉽게 전달하고 투영 할 수 있다는 것입니다 (고객 이름이 "a"로 시작하는 고객으로부터 모든 proovinces 가져 오기) 그리고 반드시 compelte 엔터티를 다루지 않습니다.

+0

어쩌면 우리는 오해가있을 수 있지만, 내가하는 일은 ODATA가 아닌 * 표준이 아닙니다. OData의 모든 예는 "새 항목 만들기 - WCF 데이터 서비스"라고 말합니다. 여기에 독점적 인 것은 무엇입니까? ".NET에서 ODATA를 노출하기 쉽고 사용자가 드릴 다운 할 수 있습니다."라고 말합니다. 그게 내가하려는 일이야! 당신은 그 예를 지적 할 수 있습니까? – Felix

+0

OData가 WCF Data Service (많은 중 하나)로 노출 된 예 : http://msdn.microsoft.com/en-us/data/video/gg601462 – Felix