2010-04-15 1 views
2

웹 양식을 데이터베이스로 전송하는 LINQ-to-SQL을 사용하여 응용 프로그램을 작성했습니다. 나는 저장소 패턴을 사용하여 LINQ-to-SQL을 없애고있다.o 해독 계층과 함께 LINQ-to-SQL을 사용하는 oData/ADO.NET 데이터 서비스

이 저장소는 기본적인 방법이 있습니다 가져 오기(), 저장() 프로젝트의 개발로 등

, 나는 형태로 특정 필드를 암호화 할 필요가 있었다. Repository의 Get(), Save() 메소드에 암호화 호출을 추가 했으므로이 작업은 간단했습니다.

이제 MS Excel 2010에서 RESTful 추출을 허용하기 위해 그 위에 oData 레이어를 추가하려고합니다. 나는 쓸데없는 오류 메시지 등 몇 가지 걸림돌 후에이 작업을했습니다. 그러나 분명히 암호화 된 필드는 여전히 암호화되어 있습니다. 내 저장소 패턴이 나를 해독했을 것입니다. 필자가 아는 한, 필자는 oData 서비스를 LINQ-to-SQL 컨텍스트에 바인딩하여 스키마 등을 작동시키지 않으면 안된다.

암호 해독 계층을 요청에 삽입하여 암호 해독이 "즉시 수행"될 수있는 방법이 있습니까? DataService의 OnStartProcessingRequest() 오버로드를 살펴 봤지만 유용하지는 않습니다.

답변

3

OData 서비스를 노출하기 위해 L2S에 직접 바인딩 할 필요는 없습니다. 자신 만의 Context 클래스를 작성하고 리플렉션 프로 바이더를 직접 사용하여 클래스가 노출하는 IQueryable 속성의 모델을 추론 할 수 있습니다.

참고 : 사용중인 L2S 접근 방식은 리플렉션 제공자도 사용하고 있습니다.

이의 핵심

는 단순히 L2S의 DataContext의 queryables ( see this)를 포장한다 그래서 당신은 쿼리 실행에 자신을 삽입 할 수 있습니다
  1. 단순히 앞으로 발생 L2S에 대한 표현과 데이터베이스에서 쿼리를 실행합니다.
  2. 결과가 L2S에서 반환되면 데이터 서비스로 반환하기 전에 즉시 해독을 수행하는 메모리에 열거 할 수 있습니다.

반사 공급자에 대한 자세한 내용은 this post을 참조하십시오.

희망이

Alex James

중 하나로, OData/데이터 서비스 프로그램 관리자

을하는 데 도움이