【问题标题】:Have EF automatically resend queries after various errors [closed]让EF在各种错误后自动重新发送查询[关闭]
【发布时间】:2013-06-18 00:46:35
【问题描述】:

当我针对冗余 SQL 配置(例如 SQL Azure)执行命令时,有时会遇到超时和其他问题。由于服务器关闭或失败而导致的错误。在 Azure 上这不是问题,因为冗余是内置的。正确的做法是使用新连接重新尝试查询,负载均衡器(或其他)很可能会将您转移到运行正常的服务器。

我的问题是是否有办法让实体框架(v4 或 v5)自动执行此操作?用 try/catch 块包装每个查询(如果收到某些错误,则重新尝试查询)是不切实际的,我相信有解决这个问题的方法,但我忽略了。

有关 SQL Azure 随机关闭连接的相关信息,请参阅:http://msdn.microsoft.com/en-us/library/ee336245.aspx#cc。但是,最近,我根本没有从 Azure 收到此错误...我只是偶尔收到零星的 SQL 超时。

【问题讨论】:

    标签: entity-framework entity-framework-4 azure-sql-database entity-framework-5


    【解决方案1】:

    看看 SQL CAT 的瞬态故障处理框架:

    http://windowsazurecat.com/2010/12/sql-azure-and-entity-framework-connection-fault-handling/

    === 由@pbarranis 添加===

    根据同一站点,但页面不同:

    瞬态故障处理框架已被更新的框架取代 模式和实践团队的可交付成果。它现在被称为 瞬态故障处理应用程序块,共有 3 种风格:

    •开发者指导: http://msdn.microsoft.com/en-us/library/hh680934(v=PandP.50).aspx

    •NuGet 包: http://nuget.org/List/Packages/EnterpriseLibrary.WindowsAzure.TransientFaultHandling

    •源代码: http://nuget.org/List/Packages/EnterpriseLibrary.Source.WindowsAzure

    新的瞬态故障处理应用程序块现在是我们的 官方推荐的处理瞬态故障的方法 在 Windows Azure 平台上运行的应用程序。

    【讨论】:

      【解决方案2】:

      如果您使用 Entity Framework 6(目前处于 alpha 阶段),则有一些新的内置支持 Azure SQL 数据库的瞬时重试(需要一点配置):http://entityframework.codeplex.com/wikipage?title=Connection%20Resiliency%20Spec

      我创建了一个库,它允许您配置实体框架以使用故障处理块重试,而无需更改每个数据库调用 - 通常您只需更改配置文件和可能的一两行代码。

      这允许您将它用于实体框架或 Linq To Sql。

      https://github.com/robdmoore/ReliableDbProvider

      【讨论】:

        猜你喜欢
        • 2020-05-15
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 2023-03-10
        • 2018-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多