0

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

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

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

4

2 回答 2

1

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

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

=== 由@pbarranis 添加 ===

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

瞬态故障处理框架已被 Patterns & Practices 团队的一个更新的交付物所取代。它现在被称为瞬态故障处理应用程序块,有 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 平台上运行的应用程序中的瞬态故障的方法。

于 2012-09-10T01:29:17.307 回答
0

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

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

这允许您将它用于 Entity Framework 或 Linq To Sql。

https://github.com/robdmoore/ReliableDbProvider

于 2013-06-17T16:46:35.633 回答