当实体框架6的SqlAzureExecutionStrategy重试时记录日志

4

当SqlAzureExecutionStrategy重试Entity Framework操作时,我该如何记录日志?当使用瞬态故障处理逻辑与常规的SqlConnection调用时,会公开一个Retrying事件。使用Entity Framework 6和SqlAzureExecutionStrategy时是否有类似的功能?如果没有,还有其他选择吗?


1
这个主题有一篇非常好的文章,解释了使用ASP.NET MVC和EntityFramework记录Azure SQL数据库的所有步骤。希望这可以帮到你。这是它的链接:http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/connection-resiliency-and-command-interception-with-the-entity-framework-in-an-asp-net-mvc-application - ACS
2个回答

2
根据ACS的评论,这篇指南讨论了使用ASP.NET MVC和EntityFramework记录Azure SQL数据库的所有步骤。本文介绍如何在EF6中构建重试逻辑以及如何创建日志记录接口和类来记录事件。
除了上面的链接外,还有一个主题讨论了EF6中连接弹性/重试逻辑及其限制
希望这可以帮到你!

有没有办法通过拦截来仅检测重试事件,并记录当前重试次数和延迟? - filip

0

你可以创建一个继承自SqlAzureExecutionStrategy的自定义ExecutionStrategy,并且重写ShouldRetryOn方法:

public class LoggedSqlAzureExecutionStrategy : SqlAzureExecutionStrategy
{
  protected override bool ShouldRetryOn(Exception exception)
  {
    var shouldRetry = base.ShouldRetryOn(exception);
    if (shouldRetry)
    {
      // log exception   
    }

    return shouldRetry;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接