数据库完成恢复后自动连接

时间:2016-04-27 07:57:25

标签: c# sql-server asp.net-mvc entity-framework

我有一个asp.net网站,它连接到一个每5分钟恢复一次的数据库,因为它是生产数据库的快照。当我登录到站点并且数据库正在恢复时,它返回与数据库相关的错误。它不会每次都返回相同的错误。

我想要的是,每次数据库恢复并且用户登录时,它将在前端返回自定义错误页面,而在后端,如果连接由于恢复而丢失,它将自动连接一次数据库在恢复中完成。任何的想法 ?感谢。

2 个答案:

答案 0 :(得分:0)

我建议尝试在数据库端找到更好的设计,以避免出现片状行为。如果这是我们的控制,请尝试使用优秀的Polly库来管理重试。它可以在Nuget上获得,并在Polly Page位于GIT。这将为您提供强大的重试策略,而无需尝试使用循环等编写一个。

// Retries for 30 seconds, 5 times.
Policy.Handle<Exception>()  // Replace <Exception> with the DB exception you receive
.WaitAndRetry(5,  retryAttempt => TimeSpan.FromSeconds(30))
.ExecuteAndCapture(() =>
{
<Your code goes here>
});

答案 1 :(得分:0)

您可以使用EF Connection Resiliency功能。连接弹性是指EF能够自动重试由于这些连接中断而失败的任何命令的能力。

通过IDbExecutionStrategy接口的实现来处理连接重试。 IDbExecutionStrategy的实现将负责接受操作,如果发生异常,则确定重试是否合适,如果是,则重试。

这里有一些有用的样本:

Implementing Connection Resiliency with Entity Framework 6

Connection Resiliency in Entity Framework 6.0 above