如何维护两个nHibernate会话的对象?

Vic*_*ues 6 c# nhibernate multithreading

我正在构建一个像这样工作的多线程系统:

虽然有实体:

  1. 从nHibernate获取实体(使用当前会话)

  2. 启动一个可与此实体一起使用的新线程*

当我启动这个新线程时,需要有一个新的Session,因为nHibernate不是线程安全的.我创建它,但之前检索的实体不适用于此会话.

今天我正在解决这种情况,从nHibernate中检索一个传递id的新实体.但这很昂贵,我正在努力节省一些时间来实现我的SLA.

有没有办法将此对象链接到此新会话而无需进行新的数据库调用?另一个会话将不会关闭,它们全部打开,直到应用程序结束.

Eli*_*lie 4

如果您正在使用分离的对象,则必须将它们重新附加到会话。如果您拥有正在使用的对象的正确 Hibernate id,调用 get,然后将您的副本与刚刚放入会话的 Hibernate 合并,您就可以做到这一点。不过,请确保使用合并,因为 saveOrUpdate() 不会删除分离对象中缺少的任何子对象,而只是添加新的子对象并将更改保存到现有的子对象。