我最近发现实体框架有一种非常简单的方法可以在SQL Azure中实现连接弹性。是否有推荐的方法在Dapper中完成同样的工作?
答案 0 :(得分:12)
防止C#中针对Azure的连接问题的最快方法是Microsoft Transient Fault Handling Block。
例如,在尝试打开与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一起使用;您可以安全地重试打开连接和读取操作,但是要注意或重试写入操作,因为存在重复插入,尝试删除行等两次的风险等。
更多细节here,此库可以作为NuGet Package here找到,其中包含Windows Azure的检测策略。