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;
});
}
}
我已经进行了一些快速测试,并且可以正常工作...但是我会遇到问题吗?这是个好主意还是坏主意?
谢谢!