问题描述
我正在尝试在环境事务中使用 NHibernate 会话。 现有代码使用 sql Server 连接并且工作正常。 现在我已经将它迁移到使用 Postgres 连接,但相同的测试代码失败了。 相关代码:
单元测试代码:
using (new TransactionScope())
{
TRoot savedEntity;
using (var unit = UnitOfWorkFactory.Create())
{
savedEntity = SaveEntity(unit);
unit.Complete(); //calls transaction.Commit();
}
工作单元代码:
public IUnitOfWork Create()
{
return Create(IsolationLevel.ReadCommitted);
}
public IUnitOfWork Create(IsolationLevel isolationLevel)
{
return new UnitOfWork(sessionFactoryConfigurer.Factory.OpenSession(),isolationLevel);
}
工作单元实现代码:
private readonly ISession session;
private readonly ITransaction transaction;
public UnitOfWork(ISession session,IsolationLevel isolationLevel)
{
this.session = session;
transaction = session.BeginTransaction(isolationLevel);
}
当调用 session.BeginTransaction 时,代码失败:
“事务已在进行中;不支持嵌套/并发事务。” 在 Npgsql.NpgsqlConnection.BeginTransaction(隔离级别级别,布尔异步,CancellationToken 取消令牌)
我已经读到 NHibernate 会自动加入现有事务,所以我尝试不使用 BeginTransaction,但是代码在 transaction.Commit() 上失败:
“交易未成功启动” 在 NHibernate.Transaction.AdoTransaction.CheckBegun()
我在调试时注意到事务的 IsActive 属性始终为 false,但这对于 sql Server 连接和 Postgres 连接都是如此。 我已经尝试在现有事务中明确登记,设置连接字符串属性“Enlist=true”以及我发现的其他一些建议。
我们使用的是 NHibernate 5.2.7
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)