当我针对冗余SQL配置(例如SQL Azure)执行命令时,我有时会遇到超时和其他错误。服务器关闭或失败导致的错误。在Azure上,这不是问题,因为冗余是内置的。正确的操作是使用新连接重新尝试查询,并且很可能负载均衡器(或其他任何东西)会将您带到正常运行的服务器。
我的问题是,是否有办法让Entity Framework(v4或v5)自动执行此操作?使用try / catch块包装每个查询(如果收到某些错误会重新尝试查询)是不切实际的,我相信我可以忽略这个问题的解决方案。
有关SQL Azure随机关闭连接的相关信息,请参阅:http://msdn.microsoft.com/en-us/library/ee336245.aspx#cc。但是,到目前为止,我根本没有从Azure中得到这个错误...我偶尔会偶尔发现SQL超时。
答案 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。