あなたは、リレーショナルデータベースを使用していると仮定するために興味深いかもしれありますが、単純にコードが挿入、更新にトリガ可能性があり、イベントを削除します。他のテーブル内にアクションなどを書くことができます。
元のデータテーブルと同じ定義の履歴テーブルを使用することも考えてください。これにより、元のテーブルをできるだけ軽量に保つことができます。これによりデータベース内のテーブルへのDQLのパフォーマンスが向上し、誤って削除されたレコードにDeleteイベントをトレースする際にすべてのレコードを取得する必要はありませんユーザーによって。
別の方法として、毎日処理される行の数に応じて、フィールドが削除されているかどうかをtrueまたはfalseにフラグを立てて、現在のアクションを保存する列を追加するだけです。 Active Directoryで動作するようにDBを構成したと仮定して、現在のユーザーを正確に識別できるようにします。
私が書いている間、私は別のアイデアを取り上げました。あなたはおそらくすでにそれについて自分自身を考えました! :-)とにかく、セキュリティ問題を管理するDLLを構築します。あなたのコードの中で、セキュリティDLLを使って識別された現在ログに記録されているユーザのパラメータを単純に渡すことができます。
それでも、log4netはそれを行う良い方法だと思います。おそらく、すべてのユーザーのイベントを個人用エディションの無料DBであるSQLite DBに記録することができます。 Microsoft Enterprise Library 4.1 - 2008年10月、私が正しく覚えていれば、非常に便利なツールを提供しています。プログラマとして、やり直してやり直す必要があるものは、急速に退屈になります。 MELは特に、これらの繰り返し可能なルーチンを繰り返し書き直す苦労を避けるために設計されています。これにより、クライアントにとって重要なもの、機能、および要件に集中することができます。 OpenSourceであり、IBM、HPなどの大企業の要求に応じてMicrosoftによって管理されています。私たちはまだその存在を無視しているかもしれない。とにかく、私はエンタープライズライブラリが、コンフィギュレーションだけでほとんど機能するので、常にあなたのアーキテクチャを検討する最善の方法かもしれないと思います。
リフレクションに慣れている場合は、リフレクションと保存中に同時にログを記録するルーチンを使用して、オブジェクトのインスタンスを初期化することもできます。
ご覧のとおり、多くの努力なしに可能にする方法はたくさんあります。それはあなたのアーキテクチャに依存します。
さて、私はたくさん書いたことがあります。私は誰にも負けないことを願っています! :-)
素敵な一日を!
非常に興味深い記事は、それを読むだろう;) – griti