【发布时间】:2011-06-23 05:51:40
【问题描述】:
在事务 Scope.Eg 中使用 Nhibernate 和 ADO.Net 操作时出现以下异常。 Nhibernate 2.1 很好,但现在升级到 3.0 会引发错误。
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
GetmemberId(); --> NHibernate Call
Update(); ADO Call OracleDB
}
由于这充当环境事务,Nhibernate 尝试在外部事务完成之前尽快处理事务。如果我错了,请纠正我,有什么解决方案可以帮助我,但是当我将 Nhibernate 调用移到 TransactionScope 之外时,一切正常.我给出的示例是示例一,我的示例涉及更复杂的示例,因为我将调用都保留在 TransactionScope 中,并且我得到的错误如下,
错误 13 NHibernate.Impl.AbstractSessionImpl - DTC 事务预处理 阶段失败 System.ObjectDisposedException:无法访问已处置的 目的。对象名称:“交易”。在 System.Transactions.Transaction.DependentClone(DependentCloneOption 克隆选项)在 System.Transactions.TransactionScope.SetCurrent(交易 newCurrent) 在 System.Transactions.TransactionScope.PushScope()
在 System.Transactions.TransactionScope.Initialize(事务 transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified) 在 System.Transactions.TransactionScope..ctor(事务 交易使用)在 NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment 准备入伍)2011-02-08 13:41:46,033 错误 13 NHibernate.Impl.AbstractSessionImpl - DTC 事务预处理阶段 失败的 System.ObjectDisposedException:无法访问已处置的 目的。对象名称:“交易”。在 System.Transactions.Transaction.DependentClone(DependentCloneOption 克隆选项)在 System.Transactions.TransactionScope.SetCurrent(交易 newCurrent) 在 System.Transactions.TransactionScope.PushScope()
在 System.Transactions.TransactionScope.Initialize(事务 transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified) 在 System.Transactions.TransactionScope..ctor(事务 交易使用)在 NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment 准备入伍)
【问题讨论】:
标签: nhibernate transactionscope