如何在Fluent NHibernate中关闭锁定?

时间:2012-04-05 15:05:15

标签: nhibernate fluent-nhibernate

当我将数据导入大型表时,我遇到了问题,整个网站都会关闭,直到导入完成。插入/更新过程最多可能需要3个小时才能完成。此外,如果由于某种原因抛出异常,表将无限期地保持锁定状态,直到重新启动应用程序池。

我调查了发生的事情。显然,触摸的表将被锁定,直到此过程完成。如果这是直接的SQL查询,我会在查询中添加“with(NOLOCK)”来解决问题。但是,我无法弄清楚如何告诉Fluent NHibernate将其添加到它生成的查询中。

另外,有没有办法构建会话工厂,我可以将其设置为默认情况下将“with(NOLOCK)”打开到所有查询中?

提前致谢。

1 个答案:

答案 0 :(得分:7)

当您打开会话或无状态会话时,使用IsolationLevel.ReadUncomitted开始事务。这相当于在该事务中的所有语句上指定NOLOCK。

using (var session = _sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction(IsolationLevel.ReadUncommitted))
{
    // do work

    transaction.Commit();
}