我在 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;
}