ConnectRetryInterval 和 ConnectRetryCount Entity Framework SQL 连接字符串设置是否会干扰执行策略?

Do ConnectRetryInterval and ConnectRetryCount Entity Framework SQL connection string settings interfer with Execution strategy?

我想知道 ConnectRetryInterval 和 ConnectRetryCount Entity Framework 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&ConnectRetryCount 干扰 DbExecutionStrategy/SqlAzureExecutionStrategy 重试逻辑。连接设置是否先重试,然后重试执行策略?或者,连接设置和执行策略根据重试时间间隔相互重叠重试尝试?

谢谢

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

ConnectRetryCount and ConnectRetryInterval 设置与 MS SQL 服务器 (v14+) 驱动程序相关联,独立于 Entity Framework。因此,只要服务器和驱动程序都支持它并且已在连接字符串中启用设置,它们也应该在 EF 中工作。但是,在您的示例中,Pooling 设置为 false。这将明确地阻止池化并每次都打开一个新连接,因此不会有“空闲”连接可以使用。

EF Core 使用 ExecutionStrategy is different since it can handle transaction errors and allow you to implement custom tactics 取决于错误类型。您还可以在配置 SQL 提供程序选项时简单地调用 EnableRetryOnFailure() 以使用默认的 ExecutionStrategy。 SQL 驱动程序的空闲连接重试和 EF 的事务失败重试之间没有重叠。