我正在使用最新的v6实体框架以及UnitOfWork模式.在过去的几年里,这在服务器上一直很好.
我想转移到azure托管并使用SQLAzure,因此开始迁移应用程序.但是我遇到了很多问题.
首先,我一直在间歇地得到这个错误
从服务器接收结果时发生传输级错误.
经过一些谷歌搜索,似乎这很常见,你需要实现自己的SqlAzureExecutionStrategy- 一切似乎都很好.直到我发现它不支持发起的交易!
然后我偶然发现了这篇博文 - 其中概述了确切的问题并提供了如何解决问题的示例代码(或者我认为).
我完全按照这个帖子(据我所知).我有我的dBconfiguration类设置,它在应用程序启动时击中了SetExecutionStrategy.
public class EfConfig : DbConfiguration
{
public EfConfig()
{
SetExecutionStrategy("System.Data.SqlClient", () => SuspendExecutionStrategy
? (IDbExecutionStrategy)new DefaultExecutionStrategy()
: new CustomSqlAzureExecutionStrategy());
}
public static bool SuspendExecutionStrategy
{
get { return (bool?)CallContext.LogicalGetData("SuspendExecutionStrategy") ?? false; }
set { CallContext.LogicalSetData("SuspendExecutionStrategy", value); }
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个上面引用的自定义类,名为'CustomSqlAzureExecutionStrategy',我在下面提到并覆盖了ShouldRetryOn方法
public class CustomSqlAzureExecutionStrategy : SqlAzureExecutionStrategy
{
protected override bool ShouldRetryOn(Exception exception)
{
var shouldRetry = false;
var sqlException = exception as SqlException;
if (sqlException != null)
{
foreach …Run Code Online (Sandbox Code Playgroud)