4

我决定使用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();
               }

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

我是 Castle 和 NHibernate 的新手,首先我看到它非常有吸引力,我决定继续使用它和 MySQL(我从未使用过这个 DB),我尝试了 ActiveWriter,它看起来很有希望,但经过漫长而努力一周我看到了这个问题,现在我觉得我被困住了,好像我浪费了我的时间。这应该很容易,但现在我感到很沮丧,因为我找不到足够的信息来进行这项锻炼,你能帮我吗?

4

3 回答 3

5

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

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

在这里阅读更多。

于 2008-09-02T02:52:51.037 回答
3

本明白了。那个文档有点混乱。请参阅页面上的最后一个区块,“嵌套交易”。

于 2008-09-02T02:49:15.133 回答
0

我终于修复了,碰巧我做错了,我覆盖了 Member 类的 Save 方法,并将 sessionScope 内部和内部设置为事务范围,所以当 a 在事务范围中涉及所有内容时,它保存在数据库中,所以当我抛出异常时,一切都已经保存了,我想就是这样。

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

于 2008-09-02T03:01:59.657 回答