【发布时间】:2010-09-08 17:58:18
【问题描述】:
我们正在(缓慢地)将应用程序(使用经典 ADO.NET DAL)迁移到 NHibernate(遵循“每个请求一个会话模式”和“存储库模式”)。
应用程序现在处于混合状态(我知道,这很可怕):
一些查询是由一次性 DAO 对象进行的(在其构造函数中打开一个连接并在其 Dispose() 方法中处理它);
一些查询是由强类型存储库(其 Get()、Save()、Update() 和 Delete() 方法总是启动新事务 - 遵循此建议 http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions - 或加入现有交易)。
... DAO 对象进行的查询非常慢(比以前慢两倍)。
我们之前遇到过数据库锁定问题(请参阅Isn't NHibernate's "one session per request" pattern a bit dangerous for long web requests?),我们解决了它仅在需要时打开多个事务,并尽快关闭它们(不仅在当前 Web 请求结束时)。因此,现在,我们的 NHIbernate 实现遵循“每个请求一个会话”模式,但具有“每个请求多个事务”。
但速度问题仍然存在。实现与以前相同速度的唯一方法是完全禁用 NHibernate 事务。
您认为可能是什么原因? NHibernate 事务不与旧的 ADO.NET 连接共享?我们该怎么办?
【问题讨论】:
标签: .net nhibernate ado.net transactions locking