C# Repository.SaveOrUpdate(),是否确定在异常时执行回滚?

C# Repository.SaveOrUpdate(),是否确定在异常时执行回滚?,c#,.net,fluent-nhibernate,repository,rollback,C#,.net,Fluent Nhibernate,Repository,Rollback,为了保存虚拟银行帐户交易的列表,我希望业务实体反映保存到数据库的状态,在出现异常的情况下也是如此 我可以假设这里的异常也意味着事务被回滚吗?或者我可以在catch中显式回滚以确定吗?如果是,那么如果该行抛出异常该怎么办 在存储库中: public void SaveOrUpdate(IList<T> entityList) { using (ISession session = FluentNHibernateManager.OpenSession()) {

为了保存虚拟银行帐户交易的列表,我希望业务实体反映保存到数据库的状态,在出现异常的情况下也是如此

我可以假设这里的异常也意味着事务被回滚吗?或者我可以在catch中显式回滚以确定吗?如果是,那么如果该行抛出异常该怎么办

在存储库中

public void SaveOrUpdate(IList<T> entityList)
{
    using (ISession session = FluentNHibernateManager.OpenSession())
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            try 
            {
               foreach (T entity in entityList)
                  session.SaveOrUpdate(entity);
               transaction.Commit();
            }
            catch (Exception e)
            {
               MyTrace.Exception(e.ToString());
               // add this line?  transaction.Rollback();
               throw;
            }
        }
    }
}
在某些类别中:

cashTransactions.Add(t);
try {
    GenericRepository<CashTransaction> repo = new GenericRepository<CashTransaction>();
    repo.SaveOrUpdate(cashTransactions);
} catch (Exception ex) {
    cashTransactions.Remove(t);
}

您必须包含回滚调用才能正确回滚事务。

您不能假设事务已回滚,但不必假设:ITransaction具有bool WasCommitted属性


您可以检查它,以确定事务是否已提交,并在必要时显式调用回滚。

要处理未提交的事务,将始终回滚它。 这在所有ado.net事务实现中都是正确的,当然在运行时NHibernate将使用您选择的ado.net提供程序