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