2

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

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

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

ここで、oData レイヤーをその上に配置して、MS Excel 2010 からの RESTful 抽出を可能にします (出てきたら)。役に立たないエラーメッセージなどでいくつかつまずいた後、私はこれを機能させています。

ただし、明らかに、これらの暗号化されたフィールドはまだ暗号化されています。私のリポジトリ パターンは、これらを復号化してくれます。私の知る限り、スキーマなどを機能させるには、oData サービスを LINQ-to-SQL コンテキストに直接バインドする必要があります。

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

4

1 に答える 1

3

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

注: 使用している L2S アプローチは、Reflection プロバイダーも使用しているだけです。

これの鍵は、L2S DataContext の queryables を単純にラップすることです (これを参照してください)。これにより、クエリの実行に自分自身を挿入できます。

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

リフレクション プロバイダーの詳細については、この投稿をご覧ください。

お役に立てれば

アレックス・ジェームズ

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

于 2010-04-15T17:35:14.087 に答える