NHibernate Session.save和transaction.Commit

时间:2015-08-07 05:42:34

标签: database nhibernate transactions

如果你们都能提供帮助,我的工作流程中有问题会很高兴

using (var transaction = Session.BeginTransaction())
 {
   try          
   {
      obj1 = Session.Save(obj1);
      obj2=Session.Save(obj2);
      transaction.Commit();
    }               
   catch
    {
      transaction.Rollback();
    }
  }

现在的情况是obj1被保存但是obj2给出了错误并且事务被回滚。

现在,当我开始一个新的操作,其中obj1和obj2都被保存,当事务提交时,它也保存了obj1,obj2和前一个obj1。
请帮我处理。
   我不想保存以前的obj1

1 个答案:

答案 0 :(得分:1)

如果会话抛出异常或者您必须回滚,则应关闭并处置该会话。它可能会保存obj1,因为一旦会话抛出异常,会话就处于不一致状态。

创建新会话和交易。

Documentation

  

currentTransaction.Rollback();

     

如果您回滚事务,则应立即关闭并放弃当前会话以确保NHibernate的内部状态一致。

9.8. Exception handling

  

如果ISession抛出异常,则应立即回滚事务,调用ISession.Close()并丢弃ISession实例。某些ISession方法不会使会话保持一致状态。