NHibernate 拦截器不要求更改多对多集合/列表

标签 nhibernate many-to-many interceptor iinterceptor

我有一个使用 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>

我正在使用 NHibrenate 2.0.1(如果这有什么不同),这不是项目生命周期中升级 NHibrenate 的好时机 - 但如果我绝对需要,我会升级。

谢谢。

最佳答案

您应该覆盖 onCollectionUpdate拦截器。

比使用集合作为 IPersistentCollection访问其 CollectionSnapshot 和 Owner。

还有祝你好运!

关于NHibernate 拦截器不要求更改多对多集合/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3005446/

相关文章:

c# - NHibernate 按代码映射 ComponentAsId 中的列无效

c# - Fluent NHibernate 的长度属性不适用于更新

django - Many_init 恰好需要 1 个参数(给定 3 个参数) django Rest Framework

c# - CaSTLe Windsor 拦截来自类内部的方法调用

android - 是否有可能排除某些对 http 日志记录的服务调用?

nhibernate - 在EntityFramework生成的每个查询之前执行一个SQL存储过程

.net - NHibernate Postgresql 日期时间到时间转换

mysql - 如何选择和更新涉及两个表的查询

google-app-engine - 如何查询多对多关系模型? - 谷歌应用程序引擎

rxjs - 无法从Interceptor订阅数据