以下は私のコードの代表的なスニペットであり、少なくとも私の側では、予期しない例外がtransaction.Rollback()
ステートメントでスローされています。
例外はタイプ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から例外が発生します。当然のことながら、それをキャッチしてロールバックを試みます。その時、私はエラーに遭遇します。
ロールバックをtrycatchでラップしたので、すべてを続行できますが、forループの後続の各反復で同じ例外が表示されます。
アイデア?このパターンは正しいですか?