我想知道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="data source=MySQLServer;initial catalog=My;integrated security=True; ConnectRetryCount=4;ConnectRetryInterval=5; Connection Timeout=5; pooling=False;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
另一个问题是关于ConnectRetryInterval&amp; ConnectRetryCount干扰DbExecutionStrategy / SqlAzureExecutionStrategy重试逻辑。首先重试连接设置,然后重试执行策略吗?或者,连接设置和执行策略根据重试时间间隔重叠彼此的重试次数?
由于
答案 0 :(得分:2)
我依靠这份涵盖“ Idle Connection Resiliency”的Microsoft白皮书作为回答您问题的参考。 (请注意,白皮书采用下载的MS Word / .docx文章格式。)
ConnectRetryCount和ConnectRetryInterval设置与MS SQL Server(v14 +)驱动程序相关联,独立于实体框架。因此,只要服务器和驱动程序都支持它,并且在连接字符串中启用了设置,就可以期望它们也可以在EF中使用。但是,在您的示例中,Pooling
设置为 false 。这将显式地防止池化并每次都打开一个新的连接,因此不会有任何“空闲”连接。
EF Core对ExecutionStrategy的使用有所不同,因为它可以处理事务错误,并允许您根据错误类型implement custom tactics。您还可以在配置SQL提供程序选项时简单地调用EnableRetryOnFailure()
以使用默认的ExecutionStrategy。 SQL驱动程序的空闲连接重试与EF的事务失败重试之间没有重叠。