ActiveRecordMediator.SaveAndFlush正在锁定SQL Server表

本文关键字:SQL Server 锁定 SaveAndFlush ActiveRecordMediator | 更新日期: 2023-09-27 18:26:11

我正试图调查与SQL Server 2008上的.NET ActiveRecord相关的问题。

我们有一个基本的存储库类,其中定义了用于保存和更新实体的方法,这些方法通常直接调用ActiveRecordMediator。

我们有一个特定的实例,如果我们在其中一个实体上调用ActiveRecordMediator.SaveAndFlush,然后尝试执行从我们刚刚保存的表中读取的存储过程,则存储过程将挂起。

查看SQL Server时,表被锁定,因此无法读取。所以我的问题是:

  1. 为什么我的SaveAndFlush锁定了表
  2. 如何确保不会发生锁定

此应用程序作为ASP.NET网站运行,因此我认为它是在请求的基础上维护会话的,但我不能确定。

ActiveRecordMediator.SaveAndFlush正在锁定SQL Server表

我相信我已经弄清楚了发生这种情况的原因。

NHibernate在我们的环境中使用时,将为整个请求打开一个事务,然后最终在处理会话时提交事务。

我们的存储过程没有使用与NHibernate相同的事务,因此发生了锁定。

我已经通过将实体服务器端的保存包装在使用中部分解决了这个问题

using(var ts = new TransactionScope(TransactionMode.New))
{
    ActiveRecordMediator.SaveAndFlush(value);
    ts.VoteCommit();
}

这样,实体将被保存并立即提交。