NHibernateでネストされたトランザクションを実行できますか?どのように実装しますか?私はSQL Server 2008を使用しているので、サポートは間違いなくDBMSにあります。時間によって、その後NHibernateでどのようにネストされたトランザクションを行うのですか?
using (var outerTX = UnitOfWork.Current.BeginTransaction())
{
using (var nestedTX = UnitOfWork.Current.BeginTransaction())
{
... do stuff
nestedTX.Commit();
}
outerTX.Commit();
}
それがセッションAdoTransactionに説明ObjectDisposedExceptionにトランザクションが非アクティブになったouterTX.Commit()
、結果に来る:
は、私はこのような何かをしようとすることを見つけます。
代わりに入れ子になったNHibernateセッションを作成するはずですか?または、トランザクションをラップするために使用する必要がある他のクラスがあります(TransactionScopeについて聞いたことがありますが、それが何であるか分かりません)。
私は現在Ayende's UnitOfWork implementation(thanks Sneal)を使用しています。
私はこの疑問を否定できない、私はまだNHibernateの新人です。
ありがとうございます!
EDIT:私はあなたのような、のTransactionScopeを使用することができることを発見した:それはSQL Serverを使用するには、私たちをロックして、私は、このことについてすべてのこと興奮していないよしかし
using (var transactionScope = new TransactionScope())
{
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
using (var tx = UnitOfWork.Current.BeginTransaction())
{
... do stuff
tx.Commit();
}
transactionScope.Commit();
}
、およびまた、データベースがリモートの場合、MSDTCを有効にすることについて心配する必要があることがわかりました。ネストされたトランザクションは、SQLで非常に便利で簡単です。私はNHibernateが同じことをエミュレートする何らかの方法を持っていると想定しています...
あなたは答えを見つけることができたことがありますか?最後にネストされたトランザクションを行う方法は? – learning
@ user281180、sort of私は実際にそれらを行う方法は見つけられませんでしたが、あなたはその経験を近似することができます。それについてブログに投稿してください:http://blog.constructionhive.com/2010/07/22/nested-transactions-and-nhibernate/ – Gavin