业务层的一个方法包含多个数据对象的更新或者删除操作,而这些操作都是应该在一个事务里的,但我们的数据持久层通常又是各自开启和关闭事务的,这个应该怎么解决(不使用框架)
public void delete(object entity)
{
   ISession session = GetCurrentSession();
   using (ITransaction tx = session.BeginTransaction())
   {
      try
        {
           session.Delete(entity);
           tx.Commit();
        }catch (HibernateException)
         {
              tx.Rollback();
              throw;
          }
   }
  }这个是使用nhibernate的删除方法,如果业务层方法调用了多次这个方法,如何组成一个事务事务nhibernate事务设计业务层事务

解决方案 »

  1.   

    用TransactionScope把它们包裹起来就可以了,你搜索一下TransactionScope用法就知道了。
    不过要注意,如果你的连接是两个不同的数据库,就会引发分布式事务。
      

  2.   

    使用TransactionScope就可以解决,LZTransactionScope trans = null;
    try {
        trans = new TransactionScope();
        // 逻辑段
        trans.Complete();
    } catch(Exception ex) {
        throw ex;
    } finally {
        if (trans != null) {
            trans.Dispose();
        }
    }