如何在.net的MVC中创建安全的每Web请求事务?

Age*_*ire 7 asp.net-mvc transactions transactionscope httpwebrequest asp.net-mvc-4

我需要在它处理的每个Web请求中成为我的整个应用程序事务.

我需要启动事务,如果控制器中没有异常,则提交它.否则,回滚.

到目前为止,我有以下实现:

  • 首先,我在控制器上创建事务作为依赖.
  • 然后,我做我的控制器/服务/存储库/其他工作.
  • 最后,主抽象控制器类执行其OnActionExecuted方法,我提交它或不提交它.

以下是我使用的技术列表:

  • MVC 4
  • Ninject
  • Automapper
  • 服务模式

现在,我想知道的是死锁怎么样?当两个Web请求同时处理时会发生什么,此外它们将获得使用两个存储库(与其DataContext实例链接)的权利,这意味着数据库中有两个表

例如:一个请求最初想要读取表Table1,然后Table2,另一个请求想要使用Table2然后使用Table1.

我该怎么办?

Age*_*ire 0

好吧,我已经意识到这个问题的一些解决方案:

  • 第一个是拥有所有表的列表并通过该列表访问它们。Table2因此,如果上下文需要两者,则之前永远不会访问示例Table1,并且不会发生死锁。

  • 第二个是创建一个惰性 IO 系统,该系统跟踪所有必要的更改(例如添加项目、检索其 id 并在其他地方使用它)。但建造起来似乎相当困难。

  • 另一种方法是在每个数据库请求开始时创建应用程序级锁,并在结束时释放它。该解决方案完全无死锁,但仅适用于低负载系统。