这是一个常见的问题,但到目前为止发现的解释和观察到的行为有一定的差距。
我们希望在我们的 MVC 网站中使用以下 nHibernate 策略:
- A
SessionScope
用于请求(跟踪更改) - 仅包装我们的
ActiveRecord.TransactonScope
插入(以启用批处理的回滚/提交) - 选择在事务之外(以减少锁定范围)
- 插入的延迟刷新(以便我们的插入/更新在会话结束时作为 UoW 发生)
现在我们:
- 不要从
SessionScope
(使用 FlushAction Auto 或 Never)获取隐含事务 - 如果我们使用
ActiveRecord.TransactionScope
,则不会延迟刷新,并且任何包含的选择也会陷入长时间运行的事务中。
我想知道是不是因为我们有一个旧版本的 nHibernate(它来自非常接近 2.0 的主干)。
我们只是无法获得预期的 nHibernate 行为,而且性能很差(使用 NHProf 和 SqlProfiler 来监控数据库锁)。