2014-12-08 6 views
3

를 확장?중 하나로, OData 쿼리 늘

http://a.com:3080/odata/DiscussionVM(6)을 $ 제어 방법에 = 장, 사용자

를 확장

[EnableQuery(MaxExpansionDepth = 7)] 
     public SingleResult<DiscussionVM> GetDiscussionVM([FromODataUri] int key) 
     { 
      return SingleResult.Create(db.DiscussionVMs.Where(discussionVM => discussionVM.DiscussionId == key)); 
     } 

이 작동 반환 올바른 JSON. 그때 다른 모델에 약간 더 고급 쿼리 실행 그러나

:

: 확장

http://a.com:3080/odata/OrganisationVM(30)?& $를 = 카테고리

및 컨트롤러 동작 ($는 = 장, 사용자)를 확장 $ (=에게 토론을 확장)

{ 
@odata.type: "#Models.DiscussionVM", 
DiscussionId: 6, 
Section_SectionID: 1005, 
User_Id: "4cecc52e-ac3a-4696-ac6c-175af2a6378a", 
DateCreated: "2014-12-06T00:00:00Z", 
OrgCat_OrganisationCategoryId: 1, 
Text: "Dummy section", 
Html: null, 
IsUserCreated: true, 
Organisation_OrganisationId: null, 
Positives: null, 
Negatives: null, 
CommentCount: 1 
} 
,536,913,632 :
// GET: odata/OrganisationVM(5) 
     [EnableQuery(MaxExpansionDepth = 5, AllowedQueryOptions = AllowedQueryOptions.All)] 
     public SingleResult<OrganisationVM> Get([FromODataUri] int key) 
     { 
      return SingleResult.Create(db.OrganisationVMs.Where(organisationVM => organisationVM.OrganisationId == key)); 
     } 

이는 DiscussionVM JSON 아래의 반환 10

그러나 User 또는 Section 개체가 없습니다. 오류가 발생하지 않습니다. 올바른 개체가 데이터베이스에서 쿼리 (프로파일 링)되고 사용자 및 섹션을 포함한 데이터가 반환됩니다.

의견이 있으십니까? 어떤 도움

+0

이 문제에 대한 업데이트가 얼마 남지 않았습니까? – Jerther

+0

아니요 : /. 나는 여분의 webApi 호출을 추가했다. –

+0

* 한숨 * 지금 JSON 문자열을 반환 할 것입니다. – Jerther

답변

0

에 대한

덕분에 나는 전에 $expand 구문을 본 적이 없다. 너 어디서 났니? 나는 당신이 당신의 쿼리를 다음과 같은 방법을 확장해야합니다 생각 :

http://a.com:3080/odata/OrganisationVM(30)?$expand=Categories/Discussions/Section,Categories/Discussions/User 

하는 중 하나로, OData V4를 가정하면, here 표준의 몇 가지 예입니다.

+1

공식 odata v4 확장 구문이 wep api 2.2에서 잘 작동하지 않는 것 같습니다. – Jerther

+0

지금까지 $ 확장 쿼리에 아무런 문제가 없었습니다. 일단 나는 코드 첫 번째 모델에서 관계를 "가상"으로 표시하는 것을 잊었다. 어떤 문제가 있습니까? 공식 $ 확장 구문은 어느 것입니까? –

+0

슬래시가있는 것 : http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part2-url-conventions/odata-v4.0-errata02-os-part2 -url-conventions-complete.html # _Toc406398162 – Jerther

0

브래드와 내가 수집 한 내용은 this SO answer에서 복잡한 유형을 엔티티 유형과 섞을 수 있습니다. 모든 유형이 엔티티 인 경우 펼치기가 잘 수행되지만 두 가지를 섞으면 부모님과 내가 갖고있는 이상한 행동으로 끝납니다.

혼합하여 사용하는 경우 확장 캐스케이드는 엔티티 유형에서 시작하여 복합 유형으로 끝나야합니다. 확장 체인은 복잡한 유형의 엔티티 유형 속성이있는 곳에서 끝나는 것처럼 보입니다.

이는 엔티티 유형을 참조하는 복합 유형이 지원되지 않는 v3에서 올 수 있습니다. 그것은 V4에 있지만 우리가 볼 수있는 것처럼 WebAPI로 완전히 깨끗하지는 않습니다.

이 문제에 대한 문서 및 지원이 부족하여 이것이 절대적인 진실이라고 주장하기는 어렵지만 적어도 내 상황을 설명하고 제 물건을 작동 시켰습니다. 희망이 당신을도 도움이됩니다.

0

필자는 oData가 확장 된 엔티티를 Edm 모델에서 참조해야한다고 설명했다. 첫 번째 레벨 이후 확장이 중지되지 않으면 확장이 더 이상 작동하지 않습니다.

그냥 (MapODataServiceRoute의 모델 설정에서) 당신의 IEdmModel의 ODataConventionModelBuilder로 확장 EntitySet를 추가 :이 도움이

var builder = new ODataConventionModelBuilder(); 
// ... 
builder.EntitySet<Categories>("categories"); 
// ... 

희망을.

관련 문제