0

我在 EF 中使用了 SqlAzureExecutionStrategy,并在 Azure SQL 数据库中使用了瞬态故障处理。当我使用事务时,它抛出错误“配置的执行策略'SqlAzureExecutionStrategy'不支持用户启动的事务。 ”。因此,我添加了一个属性 SuspendExecutionStrategy,如下所示,当设置为 true 时,它​​会解析用户发起的事务。我的问题是,如果一个用户将 SuspendExecutionStrategy 设置为 true 来运行事务,那么另一个用户会收到暂时性故障错误吗?我在这篇文章中发现 callcontext 是特定于线程的。 EF 6 暂停执行策略和重叠执行 - “不支持用户发起的事务” 异常这是一个好方法吗?或者我应该像这里提到的那样手动调用策略如何使用 SqlAzureExecutionStrategy 和“Nolock”

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            this.SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
              ? (IDbExecutionStrategy)new DefaultExecutionStrategy()
              : new SqlAzureExecutionStrategy());
        }

        public static bool SuspendExecutionStrategy
        {
            get
            {
                return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false;
            }
            set
            {
                CallContext.LogicalSetData("SuspendExecutionStrategy", value);
            }
        }
    }

用户代码:

        try
        {
            using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew, System.TimeSpan.FromSeconds(6000)))
            {
                DataContextConfiguration.SuspendExecutionStrategy = true;
                //database operations
            }
        }
        finally
        {
            DataContextConfiguration.SuspendExecutionStrategy = false;
        }
4

0 回答 0