lidd~ 2023-06-16 15:15 采纳率: 63.6%
浏览 11
已结题

关于#NHibernate#的问题,如何解决?

表中添加数据Tran.Commit();时候报错


2023-06-16 14:37:37.1152 | Com.Leayal.Web.Extensions.Services.TimedHostedServiceV2 | ERROR | NHibernate.TransactionException: Transaction not connected, or was disconnected
   at NHibernate.Transaction.AdoTransaction.CheckNotZombied()
   at NHibernate.Transaction.AdoTransaction.Commit()
   at Com.Leayal.PosterBench.DeliverServices.Impl.KrorainaAnalysisService.DoAnalysis(Object state) Transaction not connected, or was disconnected
 ExecutionContext.RunInternal => <>c.<.cctor>b__27_0 => KrorainaAnalysisService.DoAnalysis
  • 写回答

3条回答 默认 最新

  • 卑微的Coder 2023-06-16 18:05
    关注

    #NHibernate#是.NET平台中一款ORM框架,提供了对象和关系之间的映射,使得.NET应用程序可以从对象层面访问和处理数据库。如果在使用#NHibernate#添加数据时出现Tran.Commit()报错的问题,可能有以下几种情况:

    数据库连接未打开或连接已关闭
    当使用BeginTransaction()方法开启事务时,需要确保数据库连接已经打开。如果数据库连接未打开或连接已关闭,则无法执行事务提交操作。

    解决方案:在执行Tran.Commit()操作之前,需要使用Session的IsOpen属性判断连接状态,如果连接未打开,则先要打开连接,例如:

    using (var session = sessionFactory.OpenSession())
    {
        using (var transaction = session.BeginTransaction())
        {
            // 对数据进行增删改查操作
            transaction.Commit();
        }
    }
    
    

    事务已经回滚
    当执行完transaction.Rollback()或者在事务过程中出现异常时,事务已经回滚,此时执行transaction.Commit()方法,会抛出“事务已经回滚”的异常。

    解决方案:可以在transaction.Commit()操作之前进行判断,例如:

    using (var session = sessionFactory.OpenSession())
    {
        using (var transaction = session.BeginTransaction())
        {
            // 对数据进行增删改查操作
            if (transaction.IsActive && !transaction.WasRolledBack)
            {
                transaction.Commit();
            }
        }
    }
    
    

    事务过程中出现异常
    当在事务过程中出现异常时,可能会导致事务提交失败,同时会抛出异常信息。

    解决方案:建议使用try-catch语句捕获异常,并使用transaction.Rollback()方法回滚事务。例如:

    using (var session = sessionFactory.OpenSession())
    {
        using (var transaction = session.BeginTransaction())
        {
            try 
            {
                // 对数据进行增删改查操作
                transaction.Commit();
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                // 通过日志记录异常信息
            }
        }
    }
    
    

    综上所述,处理Tran.Commit()失败的问题,需要根据实际情况进行判断和处理,找出问题根源,从而解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 6月16日

悬赏问题

  • ¥20 瑞萨RA4M1芯片刷写为arduino minima
  • ¥15 前端vue跟后端java服务部署在线上阿里云服务器
  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表
  • ¥15 R 包chipseeker 安装失败
  • ¥15 Veeam Backup & Replication 9.5 还原问题
  • ¥15 vue-print-nb