gpt4 book ai didi

transactions - NHibernate 和事务 - "Transaction not connected, or was disconnected"

转载 作者:行者123 更新时间:2023-12-04 05:15:28 29 4
gpt4 key购买 nike

以下是我的代码的一个代表性片段,其中在 transaction.Rollback() 处抛出了一个意外的异常,至少对我而言是这样。声明。

异常(exception)是类型 NHibernate.TransactionException并且消息是“交易未连接,或已断开连接”。堆栈跟踪如下所示:NHibernate.Transaction.AdoTransaction.CheckNotZombied() at NHibernate.Transaction.AdoTransaction.Rollback() .

IEmployeeService employeeService = new EmployeeService(session);
var people = ReadFromFile('c:\temp.csv');

for (var person in people)
{
ITransaction transaction = session.BeginTransaction();
try
{
employeeService.Update(person);

employeeService.CheckForRecursion();

transaction.Commit();
}
catch(Exception exp)
{
if (!transaction.WasRolledBack)
transaction.Rollback();
}
}

CheckForRecursion 使用一些 SQL 来查找上次更新引入的任何递归,如果是这样我想撤消。当引入递归时,SQL 会冒出一个异常,这是正确的,我捕获它并尝试回滚。那是我遇到错误的时候。

我已将回滚包装在 try catch 中,以便整个过程可以继续进行,但我在 for 循环的每个后续迭代中看到相同的异常。

想法?这个模式正确吗?

最佳答案

你为什么不直接处理交易?

using (ITransaction transaction = session.BeginTransaction())
{
employeeService.Update(person);

employeeService.CheckForRecursion();

transaction.Commit();
}

当发生异常时,您应该销毁 session 。已对该人进行了更改,但无法撤消。当它不能被存储时,它在内存中是无效的。

关于transactions - NHibernate 和事务 - "Transaction not connected, or was disconnected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341509/

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