让EF在出现各种错误后自动重新发送查询

时间:2012-09-08 14:40:39

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

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

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

有关SQL Azure随机关闭连接的相关信息,请参阅:http://msdn.microsoft.com/en-us/library/ee336245.aspx#cc。但是,到目前为止,我根本没有从Azure中得到这个错误...我偶尔会偶尔发现SQL超时。

2 个答案:

答案 0 :(得分:1)

查看SQL CAT的Transient Fault Handling Framework:

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

===由@pbarranis ===

添加

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

  

瞬态故障处理框架已被更新的取代   可以从模式&实践团队。它现在被称为   瞬态故障处理应用程序块,有三种类型:

     

•开发人员指导:   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平台上运行的应用程序。

答案 1 :(得分:0)

如果您使用Entity Framework 6(目前处于alpha版本),那么对Azure SQL数据库的瞬态重试有一些新的内置支持(稍加配置):http://entityframework.codeplex.com/wikipage?title=Connection%20Resiliency%20Spec

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

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

https://github.com/robdmoore/ReliableDbProvider