復号化レイヤーを備えた LINQ-to-SQL を使用した oData/ADO.NET データ サービス

StackOverflow https://stackoverflow.com/questions/2644243

質問

LINQ-to-SQL を使用して、Web フォームをデータベースに送信するアプリケーションを作成しました。リポジトリ パターンを使用して LINQ-to-SQL を抽象化します。

このリポジトリには次の基本的なメソッドがあります。Get()、Save() など。

プロジェクトの開発として、フォーム内の特定のフィールドを暗号化する必要がありました。リポジトリの Get() メソッドと Save() メソッドに暗号化呼び出しを追加しただけなので、これは簡単なことでした。

ここで、MS Excel 2010 (リリース時に) から RESTful 抽出できるように、その上に oData レイヤーを置きたいと思います。役に立たないエラーメッセージなどでいくつかつまずいた後、私はこれで動作しています。

ただし、明らかに、これらの暗号化されたフィールドは依然として暗号化されています。私のリポジトリ パターンでは、これらを復号化できます。私の知る限り、oData サービスをスキーマなどの LINQ-to-SQL コンテキストに直接バインドする必要があります。私が苦痛の世界に入らない限り、仕事をすることはできません(どんなURLでも歓迎です)。

暗号化/復号化レイヤーをリクエストに挿入して、復号化が「オンザフライ」で行われるようにする方法はありますか?DataService の OnStartProcessingRequest() オーバーロードを調べましたが、これはあまり役に立たないようです。

役に立ちましたか?

解決

OData サービスを公開するために L2S に直接バインドする必要はありません。独自の Context クラスを作成し、リフレクション プロバイダーを直接使用して、クラスが公開する IQueryable プロパティからモデルを推論できます。

注記:あなたが使用している L2S アプローチも、Reflection プロバイダーを使用しているだけです。

これの鍵となるのは、L2S DataContext のクエリ可能オブジェクト (これを見てください) なので、クエリの実行に自分自身を注入できます。

  1. 生成された式を L2S に転送し、データベースでクエリを実行するだけです。
  2. 結果が L2S から返されると、Data Services に返す前に、オンザフライで復号化を実行してメモリ内で結果を列挙できます。

Reflection Provider の詳細については、こちらをご覧ください。 この郵便受け.

お役に立てれば

アレックス・ジェームス

OData / データ サービス プログラム マネージャー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top