如果你们都能提供帮助,我的工作流程中有问题会很高兴
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
答案 0 :(得分:1)
如果会话抛出异常或者您必须回滚,则应关闭并处置该会话。它可能会保存obj1,因为一旦会话抛出异常,会话就处于不一致状态。
创建新会话和交易。
currentTransaction.Rollback();
如果您回滚事务,则应立即关闭并放弃当前会话以确保NHibernate的内部状态一致。
如果ISession抛出异常,则应立即回滚事务,调用ISession.Close()并丢弃ISession实例。某些ISession方法不会使会话保持一致状态。