2013-01-06 1 views
2

NHibernate를 사용하여 OData WCF 서비스를 만들고 있는데 쿼리에 $expand을 사용하고 싶습니다. 인터페이스 IExpandProvider을 발견했습니다.이 목적을 위해 정확하게 사용되었습니다. 하지만 그것은 The IExpandProvider interface is deprecated.라고합니다 확장을 구현하는 현재의 방법은 무엇입니까?IExpandProvider 대체

답변

0

IExpandProvider는 V2로 시작하여 $ select와 같은 새 쿼리 옵션을 지원할 수 없기 때문에 더 이상 사용되지 않습니다. "새로운"방법은 IQueryable을 구현하는 것입니다. 모든 쿼리 옵션은 LINQ 식 트리로 변환됩니다. 이 작업을 수행하는 방법에 대한 자세한 내용을 보려면이 시리즈의 http://blogs.msdn.com/b/vitek/archive/2010/02/25/data-services-expressions-part-1-intro.aspx을 참조하십시오. $ expand에 대해 얘기하는 부분은 다음과 같습니다. http://blogs.msdn.com/b/vitek/archive/2010/07/15/data-services-expressions-part-9-expansions.aspx

+0

따라서 $ expand로 요청 된 관련 엔터티를 열심히로드하려면 IQueryable 속성의 getter에로드해야합니다. 예 : https://github.com/PeteGoo/NHibernate.QueryService/blob/master/NHibernateQueryService.Model/NHibernateContext.cs –

+0

실제로는 없습니다. IQ 속성 getter는 쿼리 가능 인스턴스 만 반환합니다. 이것은 쿼리의 "저장소"역할을합니다. WCF DS는이 쿼리를 사용하여 CreateQuery를 여러 번 호출 할 수 있습니다. 전체 쿼리가 작성되면 WCF DS가 GetEnumerator를 호출 할 IQueryable 의 인스턴스가 있습니다. 이것이 표현식 트리가 전체 쿼리를 포함하고있는 지점에서의 실제 쿼리 실행입니다. 그리고 그것은 확장 (그리고 나머지 쿼리도 마찬가지입니다)을 다루는 요점이 될 것입니다. –

+0

'Iqueryable '을 반환하는 것은 이미'$ expand'를 제외하고는'select n + 1'과 같은 게으른 로딩 문제를 일으키기 때문에 표현식 트리를 방문해야한다면 많은 작업이 필요합니다. 재정의 할 인터페이스 나 메소드가 있습니까? –