私は、挿入のためのデータベース監査を行うために必要のあるWebアプリケーションを持っている/ /削除、更新(そしておそらく読み込み)。私はORMとしてLINQを使用します。 Webで見つけたアイデアをいくつか使用して、関連する監査テーブルを持つエンティティを装飾するために属性を使用する方法を考え出しました。監査表自体には、現行ユーザーのIDと名前、変更タイプ、変更時刻、および操作が成功したかどうかのフィールドに加えて、元の表と同じタイプの同じ列を含める必要があります。監査はSubmitChanges中に行われます。私のデータコンテキストは抽象であり、私は具体的な実装でSubmitChangesを継承して上書きします。抽象データコンテキストは、DataContextを拡張し、現在のユーザIDと名前のプレースホルダを持つCurrentUserプロパティを追加するAbstractAuditableDataContextから実際に派生します。デフォルトでは、ログインしているユーザーがいない場合、たとえば、ユーザーテーブルの特定のフィールドが更新されたときに登録またはログイン中に、0と "システム"が表示されます。アプリケーションは、ASP.NET MVCを使用してC#で記述されています。
問題:
私の派生データコンテキストの現在のユーザーのプロパティを移入するための最良の方法は何ですか? CurrentUserが設定されているかどうかを確認するAuditUtilityに注入されるユーティリティクラスを作成する必要がありますか?そうでなければ、それを埋め込みます。テストのために、私はこれをモックしますが、ライブアプリケーションではおそらく遅延セッションでロードして取得/設定します。または、この機能を実行するために(すべてのコントローラで使用される)データコンテキストファクトリを変更する必要があります。私はすでに単体テスト時にモックファクトリを使用していますので、新しいクラスを作成する必要はありません。あるいは、派生は工場外で行い、現在のユーザはコンテキスト作成中に注入するべきです。これは、私が "代わって"監査を行うことを可能にします。
私はこれがやや主観的であることを認識していますが、あなたが貢献する可能性のある考え/経験を感謝します。
ありがとうございました。
データコンテキストスコープはアクション単位であり、かなり短命です。 – tvanfosson