以下代码片段适用于SQL Server 2008(SP1),但使用Oracle 11g对session.BeginTransaction()的调用会引发异常,并显示消息'Connection is already part of a local or a part of a local or a分布式事务“(堆栈跟踪如下所示)。使用'“NHibernate.Driver.OracleDataClientDriver”“。Oracle 11g的NHibernate TransactionScope问题
有没有其他人遇到过这个问题?
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();
}
Exception at: at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel) at NHibernate.Transaction.AdoTransaction.Begin() at NHibernate.AdoNet.ConnectionManager.BeginTransaction() at NHibernate.Impl.SessionImpl.BeginTransaction() at MetraTech.BusinessEntity.DataAccess.Persistence.StandardRepository.SaveInstances(List`1& dataObjects) in S:\MetraTech\BusinessEntity\DataAccess\Persistence\StandardRepository.cs:line 3103 Inner error message was: Connection is already part of a local or a distributed transaction Inner exception at: at Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel isolationLevel) at Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel) at System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
这可能是让NHibernate的自动冲洗正常工作 – Konstantin 2012-04-20 08:13:27