在事务 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.ObjectDisposeException:无法访问已处置的对象
目的。对象名称:“交易”。在
System.Transactions.Transaction.DependentClone(DependentCloneOption
克隆选项)在
System.Transactions.TransactionScope.SetCurrent(事务
newCurrent) 在 System.Transactions.TransactionScope.PushScope()
在 System.Transactions.TransactionScope.Initialize(事务
transactionToUse、TimeSpan 范围超时、布尔互操作模式指定)
在 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.ObjectDisposeException:无法访问已处置的对象
目的。对象名称:“交易”。在
System.Transactions.Transaction.DependentClone(DependentCloneOption
克隆选项)在
System.Transactions.TransactionScope.SetCurrent(事务
newCurrent) 在 System.Transactions.TransactionScope.PushScope()
在 System.Transactions.TransactionScope.Initialize(事务
transactionToUse、TimeSpan 范围超时、布尔互操作模式指定)
在 System.Transactions.TransactionScope..ctor(事务
交易使用)在
NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment
准备入伍)
Try
Configuration.SetProperty(Environment.TransactionStrategy,"NHibernate.Transaction.AdoNetTransactionFactory")
或者在 nhibernate 配置中
<property name="transaction.factory_class">
NHibernate.Transaction.AdoNetTransactionFactory
</property>
它对我有用=)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)