gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:44:41 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com