ConnectRetryInterval和ConnectRetryCount实体框架SQL连接字符串设置是否干扰执行策略?

时间:2018-01-17 22:52:41

标签: c# sql entity-framework database-connection

我想知道ConnectRetryInterval和ConnectRetryCount实体框架SQL连接字符串设置是否使EF重试数据库失败更新。请参阅以下设置的EF连接字符串示例

 <add key="MyConnectionString" value ="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MySQLServer;initial catalog=My;integrated security=True;    ConnectRetryCount=4;ConnectRetryInterval=5; Connection Timeout=5; pooling=False;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

另一个问题是关于ConnectRetryInterval&amp; ConnectRetryCount干扰DbExecutionStrategy / SqlAzureExecutionStrategy重试逻辑。首先重试连接设置,然后重试执行策略吗?或者,连接设置和执行策略根据重试时间间隔重叠彼此的重试次数?

由于

1 个答案:

答案 0 :(得分:2)

我依靠这份涵盖“ Idle Connection Resiliency”的Microsoft白皮书作为回答您问题的参考。 (请注意,白皮书采用下载的MS Word / .docx文章格式。)

ConnectRetryCountConnectRetryInterval设置与MS SQL Server(v14 +)驱动程序相关联,独立于实体框架。因此,只要服务器和驱动程序都支持它,并且在连接字符串中启用了设置,就可以期望它们也可以在EF中使用。但是,在您的示例中,Pooling设置为 false 。这将显式地防止池化并每次都打开一个新的连接,因此不会有任何“空闲”连接。

EF Core对ExecutionStrategy的使用有所不同,因为它可以处理事务错误,并允许您根据错误类型implement custom tactics。您还可以在配置SQL提供程序选项时简单地调用EnableRetryOnFailure()以使用默认的ExecutionStrategy。 SQL驱动程序的空闲连接重试与EF的事务失败重试之间没有重叠。