【发布时间】:2013-02-21 10:37:34
【问题描述】:
我需要在它处理的每个 Web 请求中让我的整个应用程序都是事务性的。
我需要启动事务,如果控制器中没有异常,则提交它。否则,回滚。
到目前为止,我有以下实现:
- 首先,我在控制器上创建事务作为依赖项。
- 然后,我负责控制器/服务/存储库/其他工作。
- 最后,主抽象控制器类执行其
OnActionExecuted方法,我要么提交它,要么不提交。
以下是我使用的技术列表:
- MVC 4
- 忍者
- 自动映射器
- 服务模式
现在,我想知道死锁是怎么回事?当两个 Web 请求同时处理时会发生什么,此外他们将获得使用两个存储库(链接到他们的 DataContext 实例)的权利,这意味着,数据库中有两个表?
例如:一个请求首先要读取表Table1,然后是Table2,同时另一个请求要使用Table2,然后是Table1。
我该怎么办?
【问题讨论】:
-
我将作为评论回答,因为我的回答范围(我认为您的问题)需要的不仅仅是 SO 回答。 IMO 您需要将您的演示问题与您的“域”(或业务逻辑)分开。该架构为您提供了两个优势:a) 能够协调各个逻辑子组件的执行以及它们参与(或不参与)MS 控制的事务,以及 b) 代码基础架构可以更好地实现某种形式的自定义事务或排队,如果开箱即用的工具和最佳实践由于您的应用的具体情况而不够用
标签: asp.net-mvc asp.net-mvc-4 transactions httpwebrequest transactionscope