将 TransactionScopes 与 MVC4 一起使用的正确方法是什么?

本文关键字:方法 是什么 TransactionScopes MVC4 一起 | 更新日期: 2023-09-27 18:31:10

我为每个请求使用一个TransactionScope,如下所示:

public ActionResult Login(string user, string pass)
{
    using (ServerContext context = new ServerContext ())
    {
        TransactionOptions transOptions = new TransactionOptions();
        transOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
        transOptions.Timeout = TransactionManager.MaximumTimeout;
        using (var scope = new TransactionScope(TransactionScopeOption.Required, transOptions))
        {
           // Some logic and Linq queries here
        }
}

我在事务范围内执行一些插入、更新、删除和处理调用但是,我得到了一些罕见的高负载死锁解释。所以,我做得对吗?或者最好为每个操作打开一个事务范围?(但是如果其中一个集合失败,我需要回滚所有操作。

谢谢你。

将 TransactionScopes 与 MVC4 一起使用的正确方法是什么?

AFAIK, 在 L2S 中 调用 SubmitChanges 时,LINQ to SQL 会检查调用是否在事务范围内,或者事务属性 (IDbTransaction) 是否设置为用户启动的本地事务。如果它未找到任何事务,LINQ to SQL 将启动一个本地事务 (IDbTransaction) 并使用它来执行生成的 SQL 命令。成功完成所有 SQL 命令后,LINQ to SQL 将提交本地事务并返回。

我对 MVC/EF 没有想法,但请尝试像这样包装:

 using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
 {
     using (ServerContext context = new ServerContext ())
     {

           // Some logic and Linq queries here
     }
     scope.Complete();
 }