何时调用NHibernate回滚?

何时调用NHibernate回滚?,nhibernate,Nhibernate,我正在使用NHibernate将一些数据插入表A。如果表A事务失败,我想更新表B中的状态。如何检查它是否失败 以下是我目前的代码: // Add userId to Receiver Receiver receiver = new Receiver(); receiver.User = User.GetById(Convert.ToInt32(listItem.Value)); receiver.Notification = Notification.GetById(notification.N

我正在使用NHibernate将一些数据插入表A。如果表A事务失败,我想更新表B中的状态。如何检查它是否失败

以下是我目前的代码:

// Add userId to Receiver
Receiver receiver = new Receiver();
receiver.User = User.GetById(Convert.ToInt32(listItem.Value));
receiver.Notification = Notification.GetById(notification.NotificationId);
receiver.Save();

我在哪里调用NHibernate事务?如果失败,我在哪里调用NHibernate回滚并更新表B状态?

请查看有关异常处理的官方NHibernate文档:


根据我的记忆,您实际上不必调用tx.Rollback,因为当您的代码离开using块时,它会自动执行此操作,但我记不清了。试一试,如果它的行为与我刚才描述的不一样,您可以在catch中手动回滚。

查看有关异常处理的官方NHibernate文档:

using (ISession session = factory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
    // do some work
    tx.Commit();
}
根据我的记忆,您实际上不必调用tx.Rollback,因为当您的代码离开using块时,它会自动执行此操作,但我记不清了。尝试一下,如果它的行为与我刚才描述的不一样,您可以在catch中手动回滚

using (ISession session = factory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
    // do some work
    tx.Commit();
}
或者手动

ISession session = factory.openSession();
try
{
   // do some work
   session.Flush();
   currentTransaction.Commit();
}
catch (Exception e)
{
   currentTransaction.Rollback();
   throw;
}
finally
{
   session.Close();
}
查看更多详细信息

或者手动

ISession session = factory.openSession();
try
{
   // do some work
   session.Flush();
   currentTransaction.Commit();
}
catch (Exception e)
{
   currentTransaction.Rollback();
   throw;
}
finally
{
   session.Close();
}

查看更多详细信息

Thanx以获得答案,但我不能使用var,我使用的是.NET2。0@HardCode:好的。。。您始终可以用实际类型替换var关键字。我对答案进行了编辑,以反映.Thanx作为答案,但我不能使用var,我使用的是.NET2。0@HardCode:好的。。。您始终可以用实际类型替换var关键字。我对答案进行了编辑,以反映截至2016年2月11日的NHibernate交易的URL是截至2016年2月11日的NHibernate交易的URL是