gpt4 book ai didi

oracle - Oracle 11g 的 NHibernate TransactionScope 问题

转载 作者:行者123 更新时间:2023-12-04 17:41:05 24 4
gpt4 key购买 nike

以下代码片段适用于 SQL Server 2008 (SP1),但在 Oracle 11g 中,对 session.BeginTransaction() 的调用会引发异常,并显示消息“连接已经是本地或分布式事务的一部分”(堆栈跟踪如下所示) .使用“NHibernate.Driver.OracleDataClientDriver”。

有没有其他人遇到过这个问题?

using (var scope = new TransactionScope())
{
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
// do what you need to do with the session
transaction.Commit();
}
scope.Complete();
}

异常:在 NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
在 NHibernate.Transaction.AdoTransaction.Begin()
在 NHibernate.AdoNet.ConnectionManager.BeginTransaction()
在 NHibernate.Impl.SessionImpl.BeginTransaction()
在 MetraTech.BusinessEntity.DataAccess.Persistence.StandardRepository.SaveInstances(List`1& dataObjects) 在 S:\MetraTech\BusinessEntity\DataAccess\Persistence\StandardRepository.cs:line 3103

内部错误消息是:连接已经是本地或分布式事务的一部分
内部异常:在 Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel isolationLevel)
在 Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel)
在 System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction()
在 NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)

最佳答案

此处概述了仅使用事务范围的问题:
NHibernate FlushMode Auto Not Flushing Before Find

看来 nhibernate (v3.1 with oracle dialect and 11g db w/opd.net v2.112.1.2) 需要它自己的事务来避免刷新问题,但我无法让事务范围与 nhibernate 一起使用交易。

我似乎无法让它工作:(
这可能是 nhibernate 或 odp.net 的缺陷,不确定...

在这里发现同样的问题:
NHibernate 3.0: TransactionScope and Auto-Flushing

修复:找到了解决方案!通过输入“enlist=dynamic;”进入我的 oracle 连接字符串,问题解决了。我已经能够同时使用 nhibernate 事务(以解决刷新问题)和事务范围,如下所示:

        ISessionFactory sessionFactory = CreateSessionFactory();

using (TransactionScope ts = new TransactionScope())
{
using (ISession session = sessionFactory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
//do stuff here

tx.Commit();

}
ts.Complete();
}

我检查了我的日志文件,发现了这个:
2011-06-27 14:03:59,852 [10] 调试 NHibernate.Impl.AbstractSessionImpl - 加入 DTC 事务:可序列化

在连接上执行任何 SQL 之前。我将进行单元测试以确认正确执行。我不太确定可序列化告诉我什么

关于oracle - Oracle 11g 的 NHibernate TransactionScope 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com