2011-03-09 3 views
0

이것은 간단한 시나리오 여야합니다. 부모/자식 관계가있는 데이터 모델이 있습니다. 예를 들어 Orders 및 OrderDetails - 1 Order -> 많은 OrderDetails라고 가정 해 보겠습니다..NET oData DataService가 하위 레코드를 강제로 필터링 할 수 있습니까?

표준 DataService를 사용하여 oData를 통해 모델을 노출하고 싶지만 몇 가지 제한이 있습니다.

먼저 내 주문 만 볼 수 있습니다. EntitySetRights.ReadSingle과 QueryInterceptor를 사용하면 순서가 사실임을 확인할 수 있습니다.

지금까지 너무 좋아! 하지만 관련 OrderDetail 레코드가 특정 (단일 읽기) OrderDetails를 읽을 수있는 방식으로 oData 피드에 노출 될 수있는 방법은 전체 OrderDetails 테이블에 대한 액세스 권한을 부여하지 않고 어떻게됩니까? 즉

, 나는 내 세부

myUrl.com/OrderService.svc/Orders(5)/OrderDetails <-- Good! My order is #5 

하지만 모두의 세부

myUrl.com/OrderService.svc/OrderDetails <-- Danger, Scarry, Keep Out! 

도움을 주셔서 감사합니다를 읽고 허용 할!

답변

0

이것은 "봉쇄 (containment)"라고합니다. 여기에 정확하게 설명 된 샘플은 http://data.uservoice.com/forums/72027-wcf-data-services-feature-suggestions/suggestions/1012615-support-containment-hierarchical-models-in-odata?ref=title 입니다. WCF Data Services는이 상자를 아직 지원하지 않습니다.

이론적으로 이러한 제한을 사용자 지정 LINQ 공급자를 사용하여 구현할 수 있습니다. LINQ 구현에서 확장 (그다지 어렵지 않음)을 감지 할 수 있으며이 경우 확장이 가능합니다. 그러나 엔터티 집합 자체에 대한 쿼리를 방지 할 수 있습니다 (인식하기도 쉽습니다). LINQ 표현식이이 시리즈를 어떻게 보는지에 대한 자세한 내용은 http://blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx

원래 사용하려는 공급자에 따라 다릅니다. 사용자 지정 공급자가 이미있는 경우이 작업은 그리 어렵지 않습니다. 리플렉션 기반 공급자가있는 경우이 레이어를 맨 위에 배치 할 수 있습니다. EF를 사용했다면 이것은 다소 까다로울 수 있습니다.

관련 문제