NHibrenateを使用するアプリケーションがあり、ロギング/監査にインターセプターベースのソリューションを使用しています。
基本的に、EmptyInterceptorを継承し、OnFlushDirty、OnSave、およびOnDeleteをオーバーライドするクラスがあります。
他のプロパティを変更せずに多対多を使用してマップされたセットまたはリストに追加または削除した場合を除いて、すべてが完全に機能します。インターセプターメソッドは呼び出されません。
NHibrenateに接続して、それらの変更を検出するにはどうすればよいですか?
クラスは次のようになります。
public class SomeClass
{
... properties ..
private Iesi.Collections.ISet _setOfOthers = new Iesi.Collections.HashedSet();
public virtual Iesi.Collections.ISet SetOfOthers
{
get { return _setOfOthers; }
set { _setOfOthers = value; }
}
... some more properties ...
}
このhbmマッピングを使用すると:
<class name="MyAssembly.SomeClass, MyAssembly" table="[SomeClass]">
... properties ..
<set name="SetOfOthers" table="SomeClass_SetOfOthers" cascade="none">
<key column="Owner" />
<many-to-many column="Item" class="MyAssembly.OtherClass, MyAssembly" />
</set>
.. some more properties ...
</class>
私はNHibrenate2.0.1を使用しています(それが違いを生む場合)。これは、プロジェクトのライフサイクルでNHibrenateをアップグレードするのに適した時期ではありませんが、どうしても必要な場合はアップグレードします。
ありがとう。