首页 新闻 会员 周边 捐助

Nhibernate 事务嵌套的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-11-19 19:58
  using (ITransaction trans = Session.BeginTransaction())
            {
                try
                {
                    Session.Save(new Company
                    {
                        CompanyName = "宁夏分公司A",
                        Assets = 1000000.1m,
                        IsEnable = 1,
                        Sort = 22,
                        CreateDate = ""
                    });
                    using (ITransaction trans2 = Session.BeginTransaction())
                    {
                        Session.Save(new Company
                        {
                            CompanyName = "宁夏分公司B",
                            Assets = 1000000.1m,
                            IsEnable = 1,
                            Sort = 2121,
                            CreateDate = ""
                        });
                        trans2.Commit();
                    }

                    trans.Commit();
                }
                catch (HibernateException)
                {
                    trans.Rollback();
                    return false;
                }
            }
            return true;

为什么NH不允许这样的 事务嵌套呢?

无法访问已释放的对象。
对象名:“AdoTransaction”。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.ObjectDisposedException: 无法访问已释放的对象。
对象名:“AdoTransaction”。

源错误: 


行 128:                    }
行 129:
行 130:                    trans.Commit();
行 131:                }
行 132:                catch (HibernateException)
一只老菜鸟。的主页 一只老菜鸟。 | 菜鸟二级 | 园豆:224
提问于:2012-11-19 17:02
< >
分享
最佳答案
0

using (ITransaction trans2 = Session.BeginTransaction())

using 关键字会自动释放对象。这里的主要问题出在Session.BeginTransaction() 这里,当你用了上面这句using (ITransaction trans2 = Session.BeginTransaction()), trans 和 trans2 就已经指向了同一个初始化的transaction. 当这个using 释放到trans2的时候,也就是把trans 给释放了。

收获园豆:10
三十三块 | 菜鸟二级 |园豆:373 | 2012-11-19 17:15

确实是这样的

NH不支持这样的 嵌套

现在就是在想办法  如何让它支持这样的 “嵌套”

一只老菜鸟。 | 园豆:224 (菜鸟二级) | 2012-11-19 17:18
三十三块 | 园豆:373 (菜鸟二级) | 2012-11-19 17:47
其他回答(1)
0

这个问题也是困扰我很久了,不知道有没有高手来解决啊?

lingxyd | 园豆:202 (菜鸟二级) | 2013-12-05 11:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册