2012-03-01 127 views
1

我想调查有关.NET ActiveRecord的SQL Server上的问题,2008年ActiveRecordMediator.SaveAndFlush锁定SQL Server表

我们有一个基础库类,我们有救了定义和方法的更新实体,这些方法一般直接调用ActiveRecordMediator。

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

看着SQL Server,表被锁定了,为什么它不能被读取。所以我的问题是:

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

此应用程序是作为ASP.NET网站运行的,所以我假设它是基于请求维护会话,但我无法确定。

回答

1

我相信我已经弄清楚为什么会发生这种情况。

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

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

我已经部分地被包裹我的实体服务器端的节能的使用

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

这样的实体将被保存并立即提交解决了这一问题。