我们知道如何在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成为事务范围,因此,当所有这些都涉及事务范围时,它将保存在数据库中,因此,当我抛出异常时,所有内容都已保存,我想就是这样。
总而言之,谢谢帮助。