2

我想通过在单个会话上创建多个事务来了解是否有任何问题,如下所示:

using (var session = factory.OpenSession())
{
    using (var trans1 = session.BeginTransaction())
    {
        .....
        trans1.commit();
    }

    using (var trans2 = session.BeginTransaction())
    {
        .....
        trans2.commit();
    }

    using (var trans3 = session.BeginTransaction())
    {
        .....
        trans3.commit();
    }

    using (var trans = session.BeginTransaction())
    {
        .....
        // trans1.commit();
    }
}

这是可能的还是我必须为每个事务打开一个新的会话对象?

谢谢你的帮助。

4

4 回答 4

2

是的,你正在做的很好。

nhibernate 不支持的是多个嵌套事务。

于 2013-10-28T18:47:33.933 回答
1

即使在 NHibernate 中,单个会话上也不会有多个事务。同样从个人经验来看,我可以说在任何其他情况下重用会话都不是一个好主意。

我建议保持工作流程尽可能简单以避免任何副作用:

  • 公开课
  • 公开交易
  • 使用你的实体
  • 提交事务
  • 异常情况下回滚
  • 关闭/刷新会话(总是)
于 2013-10-30T11:49:54.367 回答
0

没有问题,虽然它很不寻常。请记住,如果任何事务回滚,则应丢弃会话。

于 2013-10-30T18:26:50.260 回答
0

Web 环境中最常见的策略是每个请求都有会话。
当涉及事务时,它实际上取决于您的用例。
你所做的很好,否则 nhibernate 不会将会话与事务分开。
但同样,这取决于您的业务案例情况。

session.BeginTransaction()我建议你用包装IDisposable,所以Dispose你一定要提交事务。

于 2013-10-30T05:28:29.293 回答