NHibernate:当第一个命令发生错误时无法提交第二个命令

时间:2019-04-12 08:12:38

标签: c# .net nhibernate orm

我是NHibernate的新手。 我使用事务提交数据。如果发生错误,我将打开新事务并将错误数据插入数据库。不行 例如:我犯下mydata,发生 error1 。我回滚事务并开始新的事务以保存错误日志。当我将错误日志提交到数据库时,它仍然抛出 error1

这是我的代码:

    using (ITransaction transaction = _session.BeginTransaction())
    {
        try
        {
             var inserted = _session.Save(mydata);
             // first commit
             transaction.Commit();

        }
        catch (Exception ex)
        {
             // "Cannot insert duplicate key row in object" error occurs.
             transaction.Rollback();
             using (ITransaction errTransaction = _session.BeginTransaction())
             {
                 try
                 {
                     ErrorLogs errorLog = new ErrorLogs();                     
                     errorLog.ErrorMessage = ex.Message;                     
                     _session.Save(errorLog);

                     // second commit
                     errTransaction.Commit(); // it's not work
                     // When I commit, previous error ("Cannot insert duplicate...") occurs again.
                  }
                  catch (Exception ex2)
                  {    
                       throw ex2;
                  }
             }
             throw ex;           
         }
    }

我使用Sql Profiler查看生成的tsql。在第一次提交时,执行了插入我的数据语句。在第二次提交时,执行了插入错误日志语句,并再次执行了插入我的数据语句。 请帮我解释为什么会发生这种情况。

0 个答案:

没有答案