您知道如何在Castle ActiveRecord中实现事务吗?

时间:2008-09-02 02:40:48

标签: activerecord castle

我决定使用Castle ActiveRecord为客户制作系统,一切顺利,直到我发现交易不起作用,例如;

               TransactionScope t = new TransactionScope();

               try
               {
                   member.Save();

                   //This is just to see transaction working
                   throw new Exception("Exception");  

                   foreach (qfh.Beneficiary b1 in l)
                   {
                       b1.Create();
                   }


               }
               catch (Exception ex)
               {

                   t.VoteRollBack();
                   MessageBox.Show(ex.Message);
               }
               finally
               {
                   t.Dispose();
               }

但它不起作用,我抛出一个Exception只是为了尝试事务回滚,但令我惊讶的是我看到第一个[Save]记录到数据库中。发生了什么事?

我是Castle和NHibernate的新手,首先我看到它非常有吸引力,我决定继续使用它和MySQL(我从未使用过这个数据库),我尝试过ActiveWriter,它似乎非常有前景但是我看到这个问题已经很长时间了,现在我觉得我被困住了,就像我浪费了我的时间一样。它应该很容易但是现在我感到沮丧的原因我找不到足够的信息来进行锻炼,你能帮助我吗?

3 个答案:

答案 0 :(得分:5)

您需要将代码包装在会话范围内,如下所示:

using(new SessionScope())
{
   a.Save();
   b.Save();
   c.Save();
}

了解更多here

答案 1 :(得分:3)

Ben得到了它。那个文档有点令人困惑。请参阅最后一个块on the page,“嵌套事务”。

答案 2 :(得分:0)

我终于解决了,碰巧我做错了,我覆盖了Member类的Save方法,并使sessionScope内部和内部成为一个事务范围,所以当涉及事务范围内的所有这些时,它保存在数据库,所以当我抛出异常时,所有内容都已保存,我认为就是这样。

总而言之,感谢您的帮助。