2012-03-01 110 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(); 
} 

這樣的實體將被保存並立即提交解決了這一問題。