2013-01-18 4 views
5

에서 자식 요소를 반환합니다. 최신 ASP.Net WebAPI Nightly 빌드 (2013-01-16)를 사용하고 있습니다.ASP.NET WebAPI OData

저는 환자와 방문이라는 두 엔티티가있는 간단한 EF 데이터베이스 첫 번째 모델을 보유하고 있습니다. 각 환자는 많은 방문을 할 수 있습니다.

내 환자 목록을 쿼리하고 각 환자의 방문 엔터티가 인라인으로 반환되도록 할 수 있습니다. 나는 WebAPI의 OData 구현이 $ expand를 아직 지원하지 않는다는 것을 알고있다. 나는 단지 선택적인 클라이언트 제어 확장이 지원되지 않으며 확장 서버 측을 강제 할 수 있다는 것을 의미한다.

현재 방문 중 어떤 것도 인라인되지 않습니다. 내 데이터베이스에 대해 실행하는 쿼리가 실제로 방문 정보를 포함 않음을 확인한

[Queryable(AllowedQueryOptions=AllowedQueryOptions.Supported)] 
public override IQueryable<Patient> Get() 
{ 
    var query = this.entities.Patients.Include("Visits"); 
    return query; 
} 

처럼

예를 들어, 내 PatientController의() 가져 오기() 메소드 보인다.

예를 들어 공개적으로 사용 가능한 OData 서비스를 사용하려면 http://services.odata.org/OData/OData.svc/에서 서비스를 사용하면 Suppliers 목록을 얻을 수 있습니다. 이것은 http://http://services.odata.org/OData/OData.svc/Suppliers입니다. 또한 제품 목록이 포함 된 공급 업체 목록을 요청할 수도 있습니다. http://http://services.odata.org/OData/OData.svc/Suppliers?$expand=Products

ASP.NET 코드를 통해 (기호 서버를 통해) System.Web.Http.OData.Formatter에 도착했습니다. .Serialization.ODataEntityTypeSerializer 및 CreatePropertyBag 메서드는 직렬화 할 속성 목록을 작성하고 탐색 속성은 포함하지 않으며 NavigationLinks로 쓰지 않고 다른 곳에서는 열거되지 않는 것처럼 보입니다. .

저는 ASP.NET 세계에 상당히 익숙하며 일주일 정도 시간이 걸렸습니다 (특히 2012 년 말 OData에 대한 변경 사항을 반영하여 추가 변경 사항을 적용한 결과). 2013 년까지).

나는 ODataEntityTypeSerializer가 수정 될 경우 (내가 시도 할 수있는 최선의 방법으로 중첩 된 인라인 피드로 각 네비게이션 링크 내에서)이 추가 정보를 적절한 위치에 삽입하는 것이 좋을 것이라고 생각합니다. d 설정하십시오.

질문 :

  1. 내가 뭔가를 분명 간과하고 난이 문제를 켭 설정할 수있는 플래그가있다? 나는 그런 플래그가 존재한다면 왜 디폴트로 꺼져 있는지를 볼 수있다. (EF 지연로드와이 플래그는 잘되지 않는다)

  2. # 1이 아니오라면, 내가 할 수있는 다른 ODataEntityTypeSerializer가 있는가? 용도? 그렇다면 어떻게 전환합니까?

  3. # 2가 아니오라면, 내 자신의 글쓰기를 시작해야 할 곳이 있습니까? 난 내 자신의 시리얼 라이저에 대체 또는 내가 (런타임 프로젝트에 반대) 매우

감사를 ASP.NET의 확장 프로젝트의 내 자신의 포크를 유지해야 할 수있는 곳이 있나요!

+1

나는 내 아이 엔티티는 항상 나에게 방법을 포함라는 데없는에도 불구하고 포함되어 있습니다 ... 반대 문제를 가지고 이런 식으로 지정했습니다. JSON.Net 시리얼 라이저를 사용하고 있는데 차이가있을 수 있습니다. –

답변

3

$ OData를 (를) 지원하는 제품 목록에서 매우 커졌습니다. 그러나 내가 아는 한, 우리는 그것을 서버 측에서 돌릴 기미가 없다. 포맷터는 현재 사용자가 자신의 serializer를 대체 할 수 있도록 허용하지 않습니다.그래서 나는 포크를 만들고 $ expand에 대한 지원을 추가하는 것만 남았습니다. 당신이 작업 얻을 관리하는 경우, 풀의 요청에 우리의 방법을 보내는 고려하시기 바랍니다 :

http://aspnetwebstack.codeplex.com/SourceControl/network

+0

답변 해 주셔서 감사합니다. ASP.NET 코드베이스에있는 모든 것을 익숙하게하여 자신 만의 확장 구현을 할 수 있는지 잘 모르겠지만 포매터를 선택적으로 탐색 속성에 따라 삽입하고 인라인으로 임베드하는 것이 좋지 않을 수 있습니다. 하드 코드 된 확장. 그게 어렵거나 쉽지는 모르겠지만 가능한 한 내 프로젝트를 훨씬 쉽게 만들 것이므로 특히 기꺼이 노력하고 있습니다. –

+0

그래서이 기능은 Microsoft.AspNet.WebApi.OData 4.0.1 에서조차 3 월 말에 출시되지 않았습니까? 그 이후 공개 버전이 없습니까? –

+0

Simon, 야간 빌드에 $ select 및 $ expand 지원을 추가했습니다. 이러한 빌드를 사용하려면 기꺼이 사용하십시오. 이러한 야간 빌드 사용에 대한 자세한 내용은 http://blogs.msdn.com/b/henrikn/archive/2012/06/01/using-nightly-asp-net-web-stack-nuget-packages-with에서 확인할 수 있습니다. -vs-2012-rc.aspx –

관련 문제