Entity Framework 및 WCF Data Services (OData)를 통해 저장 프로 시저를 호출하려고했습니다. 복합 유형이 아닌 엔티티를 리턴합니다. 다음 연습은 모두 (이 one 같은) 웹을 통해 발견, 나는 내 서비스 내부에이 코드를 내놓았다 :
[WebGet]
public IQueryable<Entity> GetEntitiesByParameterId(int parameterId)
{
return CurrentDataSource.GetEntitiesByParameterId(parameterId).AsQueryable();
}
proc 디렉토리 이런 식으로 호출 : ~WcfService.svc/GetEntitiesByParameterId?parameterId=1
는 저장 프로 시저를 실행하고 반환되어야 개체를 반환합니다. 문제 없습니다.
사용할 때까지 모든 것이 잘 작동합니다. $ 선택 OData 옵션 ie. ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$select=name
. 디버깅시 위의 메서드는 오류없이 실행되지만 을 반환합니다. 클라이언트에 도달 할 때 작업이 런타임에 불안정해질 수 있습니다. 오류. 많은 연구 끝에 많은 다른 원인을 지적하는 것은 매우 일반적인 오류입니다. 나는 나의 특별한 문제와 정말로 일치하는 것을 찾지 못했다. 가장 가까운 것은 this과 this이지만 내 솔루션에는 아무 것도 작용하지 않았습니다. 이것은 DS WCF 알려진 한계이다
: 상기 제 문서에서도
. ...둘째로 LINQ 에서 EF까지는 LINQ to Objects보다 약간 다른 LINQ 표현식이 필요하기 때문에 일부 쿼리가 올바르게 작동하지 않는 경우가 있습니다 ( 경우). 당신이보고있는 문제는 어느 것입니까?
2012 년에 게시되었습니다. 사실이라면 아직 업데이트되지 않았습니까? 그리고 저장된 proc 호출에 대해 $ select가 작동하도록하는 다른 해결 방법이 있습니까?
TL; DR :
작품 :
~WcfService.svc/GetEntitiesByParameterId?parameterId=1
~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$top=1
~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$skip-5
~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$filter={filter query}
~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$expand=SomeNavigationProperty
이
가 작동하지 않습니다 :
~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$select=name
기술 정보 :
EntityFramework 5, WCF 데이터 서비스 5.0, 나는 또한 EF6와 WCF 5.6.2로 업그레이드를 시도하고 그것은 여전히 작동하지 않았다 * 중 하나로, OData V3
.
도움을 주시면 감사하겠습니다. 감사!
UPDATE : 조금 더, 내가 저장 프로 시저를 통과 단지 수동으로 다음 List<Entity>
건설 된 쿼리로 반환 반환하지 시도이를 통해 멍청이 후 . $ select를 사용할 때 여전히 동일한 오류가 있음을 알면 놀라실 것입니다. WCF 서비스 작업 제한이 될 수 있으며 특히 저장 프로 시저 호출에만 제한이 없습니다.documentation으로 돌아가서 다른 OData 쿼리 (맨 위로, & orderby 확장)를 사용하지만 $ select에 대해서는 사용하지 않습니다.
이것은이 특정 문제에 대한 많은 소스를 찾을 수 없어 내 테스트를 통해 관찰 한 것입니다. 모든 설명 및 기타 문서를 환영합니다.
$ select가 아직 지원되지 않는 것 같습니다. 그러나이 문제를 해결하려면 GetEntitiesByParameterId를 래핑하고이 작업의 이름을 선택하는 GetEntitiesNameByParameterId와 같은 다른 작업을 구현할 수 있습니다. 이 작업은 이름 모음을 반환합니다. –
@LaylaLiuMSFT 안녕하세요! 고마워. 나는 당신이 말한 것을 분명히하고 싶습니다. "$ select는 아직 지원되지 않습니다." 일반적으로 WCF 서비스 작업에 대해서만 저장 프로 시저 호출 용입니까? 그리고 WCF에 대한 추가 업데이트를 포기하는 협상이 이미 있기 때문에 언제 지원 될 것인지 알고 있습니까? – iamnobody
@LaylaLiuMSFT 추가 관측을 위해 내 게시물을 업데이트했습니다. 또한, 해결 방법을 주셔서 감사하지만, 나는 더 동적이고 유연한 선택을하고 싶습니다. OData가 수행하는 것과 같이 필요한만큼의 열을 추가/제거하십시오. 시간을내어 주셔서 다시 한번 감사드립니다. – iamnobody