2012-03-01 9 views
1

私はSQL Server上で.NETのActiveRecordに関連する問題を調査しようとしています2008年ActiveRecordMediator.SaveAndFlushロックSQL Serverテーブル

我々は保存のために定義された方法および更新エンティティ、これらのメソッドを持っているベースリポジトリクラスを持っています一般的にActiveRecordMediatorを直接呼び出してください。

私たちがエンティティの1つでActiveRecordMediator.SaveAndFlushを呼び出し、次にsprocを保存したテーブルから読み込んだストアドプロシージャを実行しようとすると、特定のインスタンスが発生します。

SQL Serverを見ると、テーブルはロックされているため、読み込めません。だから私の質問は:

  1. なぜ私のSaveAndFlushはテーブルをロックしていますか?
  2. ロックを解除する方法を教えてください。

このアプリケーションはASP.NET Webサイトとして実行されているので、要求ベースでセッションを維持していると想定していますが、わかりません。

答えて

1

私はこれがなぜ起こったのかを考え出したと思います。

私たちの環境で使用される場合、NHibernateは要求全体に対してトランザクションをオープンし、最後にセッションが破棄されるとトランザクションをコミットします。

私たちのsprocは、なぜNHibernateと同じトランザクションを使用していなかったのですか?

私は部分的に実体が保存され、すぐにコミットされます使用して

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

この方法で、エンティティサーバ側の私の節約をラップすることにより、問題を修正しました。

関連する問題