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

时间:2020-03-05 18:46:13  来源:igfitidea点击:

我决定为使用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(我从未使用过此DB),我尝试了ActiveWriter,它看起来非常有前途,但是经过很长时间的努力一周我看到了这个问题,现在我感觉自己陷入困境,浪费了时间。这应该很容易,但是现在我感到沮丧,因为我找不到足够的信息来进行这项运动,我们能帮我吗?

解决方案

回答

本知道了。那文档有点混乱。请参阅页面上的最后一个块"嵌套事务"。

回答

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

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

在这里阅读更多。

回答

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

总而言之,谢谢帮助。