NHibernate Event/Listener 的设定 - 对象的创建与修改跟踪审计

如果你从 NHibernate 缓存设定测试项目 下载过那个测试项目源码,可能注意到里面有一部分内容是做对象变化跟踪的。或者你可能发现这个内容根本不能正确工作!别急,今天我们就着手解决这个问题。

首先我把 nhtest 这个项目升级到了 nhibernate 3.2.0-GA,基本上没有什么大变动,不过有些配置文件和动态库不再需要了,被剔除的支持库包括:

Antlr3.Runtime.dll
LinFu.DynamicProxy.dll
NHibernate.ByteCode.LinFu.dll

(原文链接 http://ddbiz.com/?p=105)

(至于 proxy 是否能发挥作用,不是本文的重点,后续文章再讨论),更新后的项目文件就是现在【这个】了

关于对象变化的跟踪设定,网上有很多的文章,我也参考了很多(自己一点一点来确实太累了),不过这些内容似乎都不能正确工作。经过必要的“探索”,得出一点儿结论。咱们先把结论放在这:

【结论】

1. 如果在 hibernate.cfg.xml 配置文件中定义 <event type=""><listener ... /></event> 或者<listener ... />,那么这个listener 将替换掉NHibernate中的那些DefaultxxxxxListener,这将导致一些功能不能正确实现。

2. 如果持久化对象采用 dynamic-update="true"的方式,那么IPreUpdateEventListener.OnPreUpdate 将不被触发。

3. 区别对待对象的创建、修改等保存的跟踪审计。

接下来,让我们详细了解一下 NHibernate 3.2 中Event的情况吧。当我们不对 nhibernate 3.2.0进行任何而外的event/listener设定时(包括xml 的配置文件或者编程方式),它将默认装载一些欲定义的event。通过一段初始化代码:

                cfg = new Configuration();
                cfg.Configure();
                //DynamicListener listeners = new DynamicListener();
                //listeners.Register(cfg);
                StringBuilder sb = new StringBuilder();
                NHibernate.Event.EventListeners els = cfg.EventListeners;
                foreach (PropertyInfo pi in els.GetType().GetProperties())
                {
                    sb.AppendFormat("{0}: ", pi.PropertyType.Name);
                    Array ao = (Array)pi.GetValue(els, null);
                    foreach (object o in ao)
                    {
                        sb.AppendFormat("{0} ", o.GetType().Name);
                    }
                    sb.AppendLine();
              
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值