2014-11-18 7 views
0

Microsoft에서 ODataProviderToolkit의 'Custom Data Service Providers' documentation을 읽은 후에는 어디에서 시작해야하는지 혼란 스럽습니다. 데이터베이스의 테이블에 대한 OData 서버를 갖기를 원하는데,이 구조는 컴파일 시간 동안 알 수 없습니다. 우리는 바꿀 수 없습니다.MS SQL Server의 동적 테이블에 대한 사용자 지정 데이터 서비스 공급자 (WCF 데이터 서비스)

지금은이 테이블을 사용자가 재구성하고 OData 서비스를 컴파일하고 업데이트 할 때마다 데이터베이스에서 모델을 업데이트합니다. 이것은 적합하지 않습니다.

'파트 4 : 기본 읽기 전용 유형이없는 데이터 공급자'문서는 Linq를 개체에 사용하여 구현하는 방법을 설명합니다. 구현은 매우 복잡하여 IQueryable 데이터 공급자를 생성합니다.

내 질문 : TSQL dataprovider 및 IQueryable 인터페이스를 제공하는 표준 클래스를 사용하여 요청한 구현을 간단하고 간단하게 작성하면 안됩니까? TSQL 데이터 소스 인 SQLConnectionString을 사용하면 SQL에 linq을 사용하는 EF 4 ...

저는이 모든 것을 어떻게 조합 할 것인지 잘 모릅니다.

또는 ExpressionVisitor, GetSquenceValueMethodInfo 등과 같은 모든 표현식 트리 관련 메서드를 구현하는 것이 정말로 필요합니까?

미리 감사드립니다.

답변

1

약 1 년 전에 이것을 시도했습니다 (Web API OData 2). 내가 한 것은 모든 요청에 ​​대해 즉시 EDM 모델을 생성하고이를 사용자 지정 OData Route 제약 조건에 설정하는 것이 었습니다. 컨트롤러에서 현재 요청에 해당하는 유형의 EdmEntityObjects를 반환했습니다. IQueryable을 반환하면 필터링의 모든 마법을 수행 할 것으로 예상되지만 조작이 지원되지 않는다는 말에는 실패했습니다. 우리는 (timecockpit) 이후로 OData AST에 대한 QueryNodeVisitor를 구현했습니다. 이는 전체 IQueryable 구현보다 훨씬 덜 복잡합니다. 우리는 모든 기능을 지원하는 것이 아니라 사용자 정의 쿼리 언어 (TCQL)에서 사용할 수있는 기능 만 지원합니다.

최신 OData 웹 API가 형식이없는 EdmEntityObjects에서 필터링을 지원하는지 최근에 확인하지 않았습니다. 비록 필터링을하기 전에 모든 엔티티를 메모리에로드하지 않기 위해 SQL 데이터베이스에 필터 조건을 전달합니다.

저는 Linq-2-SQL을 사용하여 쿼리를 SQL로 직접 전달하는 것에 의구심이 있습니다. 최소한 (예 : 사용 권한 검사 추가를위한) 쿼리를 다시 작성하는 것이 가장 중요합니다.