これらのLinqToSQLの質問のもう1つは、O / R Designerの動作が非常に不可解であるため、どこかでボートに乗り遅れたに違いないと確信しています...
LinqToSQLテーブルの基本クラスがあります。これをと呼びLinqedTable
ました。私はリフレクションを使用して、子孫クラスのすべてのプロパティを取得し、他の標準的な処理を実行することに成功しました。
ここで、テーブルの自動監査を行いたいので、LinqedTable
レコードが挿入または削除されたとき、またはフィールド値が変更されたときはいつでも、変更タイプ、フィールド名、およびその値の詳細を示すレコードを監査テーブルに挿入します。保存前と保存後。
PropertyChanging
イベントを使用して、保存する前にすべての変更されたプロパティを追跡し、各SubmitChanges()
呼び出しの後に変更のコレクションをクリアすることで、それを実行できると思いました。しかし、O / Rデザイナーから生成されたコードは、奇妙な理由で、イベントのプロパティ名を提供しませんPropertyChanging
。空の文字列を送信します。(なぜ?!)イベントでプロパティ名を送信しますがPropertyChanged
、元の値を取得するにはもう遅すぎます。
部分メソッドを使用してすべてのプロパティの元の値をすべて取得しようと考えましたOnLoaded()
が、これは定義上プライベートであり、基本クラスのそのメソッドにアクセスする必要があります。リフレクションを使用してそのメソッドを取得したとしても、それは、テーブルごとに部分メソッドの残りの半分を実装する必要があることを意味します。これは、継承の目的をやや損なうことになります。
また、DataContextで、使用またはオーバーライドするのに適したメソッドが見つかりません。
では、この監査機能を機能させるために何をお勧めしますか?