6

我最近发现 Entity Framework 有一种非常简单的方法可以使 SQL Azure 中的连接具有弹性。在 Dapper 中是否有推荐的方法来完成相同的操作?

4

1 回答 1

13

防止 C# 中针对 Azure 的连接问题的最快方法是 Microsoft 瞬态故障处理块

例如,以下代码在尝试打开与 Windows Azure SQL 数据库的连接时最多会重试 3 次,中间间隔 1 秒:

var retryStrategy = new FixedInterval(3, TimeSpan.FromSeconds(1));

var retryPolicy = 
  new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);

retryPolicy.ExecuteAction(() => myConnection.Open());

FixedInterval是退避策略,所以它会尝试,等待 1 秒,再试一次,等等,直到尝试 3 次。

SqlDatabaseTransientErrorDetectionStrategy只是对抛出的异常进行检查,如果是应该重试的连接异常,它将告诉RetryPolicy再次执行该操作。如果不是连接异常,则不执行该动作,照常抛出原来的异常。

至于何时应该将它与 Dapper 一起使用;您可以安全地重试打开连接和读取操作,但请注意或重试写入操作,因为存在重复插入、尝试删除行两次等风险。

更多细节在这里,这个库可以作为一个NuGet 包在这里找到,其中包括 Windows Azure 的检测策略。

于 2015-01-03T12:05:21.020 回答