2010-01-26 58 views
1

我正在使用NHibernate(v 2.1.0.4000)并尝试使用事件侦听器进行更新操作。Nhibernate听众无法正常工作

我使用以下代码将监听器添加到Nhibernate配置中。

var configuration = new Configuration();  
configuration.SetListener(ListenerType.Update, new UpdateListener()); 
_sessionFactory = configuration.BuildSessionFactory(); 

当我更新两个项目时,第一个项目没有进入侦听器的“PerformUpdate”函数。但是,更新第二项时,该函数正在被调用。

这是怎么发生的?

---编辑---

在调试,我发现,在听众的 “OnSaveOrUpdate”,正在执行以下代码:

object obj4 = session.PersistenceContext.UnproxyAndReassociate(@event.Entity); 
@event.Entity = obj4; 
@event.Entry = session.PersistenceContext.GetEntry(obj4); 

我预计@event。 Entry为null,但它不为null并且状态为Loaded。 调用GetEntry方法时应该发生什么?

回答

0

你能为你的听众展示代码吗?你有没有使用一个分析器来确保更新是为两个项目发布的?如果没有更改项目,我可以看到发生这种情况,因此不会发布更新。

编辑补充:我想你使用的是较老的Listener实现。我建议使用new style(还有ISaveOrUpdateEventListener)。你正在实施审计功能吗?

我还建议您验证是否为第一项发布更新。我知道你说过你确定它已经改变了,但你也应该检查NH是否认为它已经改变了。调试这样的东西时,消除明显的问题总是一个好主意。

+0

我在监听的唯一功能是: 保护覆盖无效PerformUpdate(SaveOrUpdateEvent @event,对象实体,IEntityPersister留存){ 了该功能没有被调用。我相信这两个对象都会改变。 – Jan 2010-01-26 14:00:00

+0

我发现当我得到一个对象,进行更改并更新对象时,侦听器中的performUpdate函数永远不会被调用。 – Jan 2010-01-27 13:28:43