【发布时间】:2010-07-28 01:23:31
【问题描述】:
这个问题纯粹与 AR 相关。
假设我的 web/wcf 应用程序中有 2 个层 - DataLayer 和 BusinessLayer。 DataLayer 包含在映射上工作的几乎原子操作(查找、获取、保存、特殊查找、交叉查找等 :))。有很多 HQL 或标准。这一层没有使用 SessionScope。我的一些映射包含惰性集合。
现在,BL 层的方法包含与 DL 调用混合的业务逻辑 - 这很正常。对于每个在内部具有只读操作的公共方法,我都指定了 SessionScope(FlushAction.Never)。对于所有具有一些保存或更新操作的方法,我使用 TransactionScope(),内部带有 try catch,在方法末尾使用直接 VoteCommit,在 catch 子句中使用 VoteRollback。我已将 ReadCommitted 设置为isolationLevel。
对于基本情况,这是可行的。当我编写使用其他方法和内部事务的方法时,我开始遇到真正的问题——我说的是锁。例如,我有递归事务的方法。 似乎某些“读取”方法(具有自己的 SessionScope(FlushAction.Never))由于其他事务而被阻止。
我无法确定到底出了什么问题,但我开始认为我有一些重大的设计问题。
在城堡网站上的帮助对我没有多大帮助,还在 AR 资源中进行测试 - 它们对我来说太基础了。
谁能真正解释我应该如何使用 TransactionScopes 或者我的错误是什么?
【问题讨论】:
标签: castle-activerecord transactionscope