【发布时间】:2011-03-10 08:24:58
【问题描述】:
我编写了一个应用程序,它使用 NHibernate 来提供底层对象持久性模型。
数据模型由一个对象组成,该对象具有多个字符串属性和一个用于存储任意数据的 HashSet 属性。这在 NHibernate 中表示为一个附加了一个集合的类。
应用程序的核心是在线程池中运行的业务规则引擎。成功执行规则集后,我请求 NHibernate 更新数据库中的对象。
因为它是多线程的,所以我每次进行数据库访问时都会调用 .OpenSession() 以返回一个新的 ISession 对象来完成我的工作,并在使用后将其处理掉。
不幸的是,这意味着我无法利用延迟加载 - 就像我启用它一样,我到处都会收到延迟加载异常错误。
我已经尝试过使用互斥锁来锁定线程之间的单个 NHibernate 会话并打开延迟加载。这有效,但速度非常慢。分析表明,等待互斥体花费了大量时间 - 这会破坏应用程序的并行性。
有没有办法在我的情况下启用延迟加载? IE。跨线程数据库访问。
或者还有其他方法可以解决这个问题吗?每次规则执行完成时可能不会显式触发更新?虽然我这样做的主要原因之一是如果应用程序失败,DB 代表应用程序中数据的最后状态。
您可以提供的任何帮助/指示将不胜感激。
【问题讨论】:
-
我在答案中添加了一个部分。
标签: .net nhibernate