【问题标题】:Handling transaction with UnitOfWork and EF使用 UnitOfWork 和 EF 处理事务
【发布时间】:2013-07-19 20:02:58
【问题描述】:

我正在使用 Entity Framework 5.0 和 MVC4。我有几个域。它们每个都有自己的 DbContext(使用适当的表)、存储库和服务。我还实现了 UnitOfWork。

在一个服务中为特定域处理特定的事务流很简单。我正在对表进行一些操作,最后我调用了 UnitOfWork.Save,它的行为类似于 Transaction.Commit。

但是假设我有一种情况,我必须为两个不同的域调用操作,并且这两个操作必须放在一个事务中。我可以从控制器访问域的服务,因此从那里调用此操作。目前我可以看到三种解决方案:

  1. 我必须在控制器中有 UnitOfWork 并在最后调用 Save 方法(我不喜欢这个想法)。
  2. 创建一些服务,我将在其中拥有 UnitOfWork 并访问这两个服务(实际上它与上面的解决方案相同,但我将逻辑移动到单独的类)
  3. 我必须在控制器内部创建额外的 TransactionScope 并在最后提交

请告诉我您认为最好的选择。如果你有以上三个以外的,请告诉我。或者也许我的概念有问题?我的意思是域及其数据库上下文?

【问题讨论】:

    标签: asp.net-mvc entity-framework unit-of-work


    【解决方案1】:

    假设您的 UnitOfWork 实现支持 .NET 中的普通事务,您可以执行以下操作,它们应该注册当前正在运行的事务。

    protected TransactionScope CreateTransactionScope()
    {
        var options = new TransactionOptions();
        options.IsolationLevel = IsolationLevel.ReadCommitted;
        options.Timeout = TransactionManager.MaximumTimeout;
        return new TransactionScope(TransactionScopeOption.Required, options);
    }
    
    using (var scope = this.CreateTransactionScope())
    {
        // do operations with context 1
        // do operations with context 2
    
        scope.Complete();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多