私は通常、これを処理するために何らかの形式の監査テーブルを使用します。私が現在働いている場所では、すべての監査テーブルを監査スキーマの下に置き、リビジョンを追跡したいすべての監査テーブルを用意しています。NHibernate は使用しないため、トリガーを使用して、特定の行に対するすべての更新がタイムスタンプとユーザー ID とともに監査テーブルに記録されるようにします。これにより、リビジョンが行われた方法のコンテキストと順序を取得できます。作る。
NHibernate でトリガーを使用するのは難しいようですが、この投稿で説明されているように、NHibernate インターセプターまたはイベントのようなものを使用できます。コードに依存するよりもトリガーの方が望ましいと思いますが、これが NHibernate を使用する唯一の方法である場合は、一見の価値があるかもしれません。
最後に、SQL Server のネイティブな監査またはトレース機能を使用できると述べているのを見てきました。私はこれを自分で使用したことはありませんが、SO に関するいくつかの投稿を覚えています。これは、独自の手動監査テーブルと関連するトリガーを作成する必要性を置き換えることを示唆しています。上記のリンクからのこの引用に示されているように、あなたが望むことをしているようです。
データベース オブジェクトに対するユーザー、ロール、またはグループのアクティビティの監査は、テーブル レベルまで制限できます。つまり、SQL Server 監査をターゲットにして、1 人または複数のユーザーの特定のアクティビティを個々のテーブル レベルまで追跡できます。たとえば、SQL Server 監査では、DBO による Payroll テーブルへのすべての更新のレコードを作成できます。
私には、単なる改訂履歴というよりも真の監査のように聞こえますが、この分野の経験が豊富な人なら、改訂追跡に使用できる可能性についてコメントできるかもしれません。もちろん、それが NHibernate に与える影響も確認する必要があります。