0

私はNHibernate 3を使用しています。私のアプリケーションはSQL Server 2008に対して実行すると正常に動作しますが、SQL 2000で断続的なエラーが発生しています(私たちはNH言語を適切に変更しました)。エラーはすべてMDTC(分散トランザクション)コンポーネントに関連しています。通常、読み取りは正常ですが、コードは保存/更新中に爆発しますが、必ずしも同じエラーではありません。私たちがよく見てきたのは、「分散トランザクションが完了しました。このセッションを新しいトランザクションまたはNULLトランザクションに参加させてください。 'NHibernate IPreUpdateEventListener/IPreInsertEventListenerにアクティブなトランザクションがないのはなぜですか?

私はこれの根本原因を調査しており、いくつかのログを追加しました。 IPreUpdateEventListenerとIPreInsertEventListenerインターセプタが定義されているので、そこに私のリポジトリと同様にログインします。私が見つけているのは、私がリスナーに着くまでに、現在のセッションには取引がないということです。ここで

は私のリポジトリのコードです:

public virtual void Save(object entity) 
{ 
    logger.DebugFormat("Opening transaction to save entity type {0}.", entity.GetType().Name); 

    using (var t = new TransactionScope()) 
    { 
     GetSession().SaveOrUpdate(entity); 
     logger.DebugFormat("Committing transaction."); 
     t.Complete(); 
    } 
} 

そしてここでは、私のイベントリスナーのコードです:

logger.DebugFormat("Save/Insert entity. Transaction.Active = {0}", 
    persister.Factory.GetCurrentSession().Transaction != null 
    ? persister.Factory.GetCurrentSession().Transaction.IsActive.ToString() 
    : "no transaction"); 

そしてここでは、ログ出力されます:

2011-01-14 17:23:13,549 [9] DEBUG BaseRepository`1.Save - Opening transaction to save entity type XXXXXXX. 
2011-01-14 17:23:13,566 [9] DEBUG BaseRepository`1.Save - Committing transaction. 
2011-01-14 17:23:13,598 [9] DEBUG AuditEventListener.Audit - Save/Insert entity. Transaction.Active = False 

あなたは何を見ることができますこれは間違っていますか?プレ・インサートにトランザクションがアクティブでない理由は何ですか?誰かが私はSQL Server 2000のために何か特別なことを知っていますか(MSDTCはスイッチオンされていますか?) 2008環境では、Windows 7を実行して、私のローカルマシンであり、SQL Server 2000サーバーは、サーバー2003

答えて

3

のTransactionScopeであることを

はNHibernateのトランザクションを作成しませありません。

session.BeginTransaction()を使用して明示的に作成する必要があります。それは自動的に分散トランザクションに参加する(完了する前にCommit()それを忘れないでください)

+1

ありがとう。それは私が疲れているのを見ていないことでした。 NHトランザクションを使用するように切り替えましたが、類似しているが関連するエラーがあり、session.BeginTransaction()を実行したにもかかわらず、イベントリスナーでTransaction.Activeがまだfalseでした。これは、アプリケーションがSql Serverとは異なるマシン上にある場合にのみ発生するため、ネットワーク/アクセス許可に関連していると想定しています。 –

関連する問題