4

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

我调查了正在发生的事情。显然,在此过程完成之前,所接触的表格都被锁定。如果这是直接 SQL 查询,我会在查询中添加“with (NOLOCK)”来解决问题。但是,我不知道如何告诉 Fluent NHibernate 将其添加到它生成的查询中。

另外,在构建会话工厂时,是否有一种方法可以在默认情况下将“with (NOLOCK)”设置为所有查询?

提前致谢。

4

1 回答 1

7

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

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

    transaction.Commit();
}
于 2012-09-26T10:21:23.290 回答