1

SqlAzureExecutionStrategy 不能与用户发起的事务一起使用。只要您在事务中执行代码,它就会引发异常。MS解决方案是更改代码

var executionStrategy = new SqlAzureExecutionStrategy();

executionStrategy.Execute(
    () =>
    {
         myCode();
    });

但这不是一个选项,因为我有很多遗留代码,我无法更改这么多代码,并且事务范围内的代码可能无法执行两次。

所以我的解决方案是在没有事务时使用 SqlAzureExecutionStrategy,如果代码在事务中,则使用 DefaultExecutionStrategy(至少我在代码的某些部分进行了重试)

public class MyConfiguration : DbConfiguration
{
   public MyConfiguration()
  {
       SetExecutionStrategy("System.Data.SqlClient",
 () =>
          {
               IDbExecutionStrategy returValue;

               if (Transaction.Current == null)
                   returValue = new SqlAzureExecutionStrategy();
               else
                   returValue = new DefaultExecutionStrategy();

               return returValue;
          });
  }
}

我已经进行了一些快速测试,并且可以正常工作...但是我会遇到问题吗?这是个好主意还是坏主意?

谢谢!

4

0 回答 0