私はEFを使用してMVC3アプリで何らかの監査動作を構築しています。コードへの大きな影響を回避するために、そしてもちろん、できるだけ多くの余分なコードを回避するために、いくつかのアプローチを試しました。アプリケーションは35%で完了しているためです。
Audit
オブジェクトは次のようになります。
- AuditId
- ユーザーID
- OperationId
- ModuleId
- タイムスタンプ
- ペイロード
- <モジュール>
- <操作>
- <ユーザー>
アイデアは次のようになります。
SaveChanges()
を非表示にしてオーバーライドする部分クラスを作成しましたSaveChanges(SaveOptions)
。
次に、同じメソッドのオーバーロードをさらに2つ作成して、エンティティをパラメーターとして受け取るか、SaveOptions
列挙型パラメーターとして受け取らないようにしました。
明らかなことに加えて、新しいものは私のエンティティSaveChanges()
のプロパティを設定しますが、問題はここで発生します: 、、およびが必要です。Audit
User
Module
Operation
これを解決するための私の現在の解決策は次のとおりです。
Audit
コンストラクタークラスレベルでオブジェクトを宣言しました。- コントローラのコンストラクタで
User
、Audit
オブジェクトにを設定しました。 - それぞれの方法で
Operation
、必要に応じて設定しました。 - 変更の保存では、からのペイロード(私の場合はxml)を処理し
ObjectStateManager
ます。
I'm very skeptic about this approach, it seems to be a little intrusive to my code. I've read lots of posts here in SO, but none of them helped me to improve this approach nor decide to change it. So please avoid linking things I've probably already read.