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

MBK*_*MBK 5 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" />
Run Code Online (Sandbox Code Playgroud)

另一个问题是有关DbExecutionStrategy / SqlAzureExecutionStrategy重试逻辑对ConnectRetryInterval&ConnectRetryCount的干扰。连接设置是否先重试,然后再执行策略?或者,连接设置和执行策略是否根据重试时间间隔彼此重试?

谢谢

Cah*_*hit 3

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

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

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