当连接丢失时,如何将实体框架连接重新连接到数据库



我正在使用实体框架5.0处理一个MVVM项目。

我连接到托管数据库,有时实体框架会失去与数据库的连接。

当连接丢失时,将连接重新连接到数据库的最佳方法是什么?

当在保存更改期间连接断开时,您只会得到异常。整个保存是在由于异常而未提交的事务中完成的,EF 不会将其当前更改集标记为已完成。当发生特定异常时,只需尝试再次保存更改 - EF 将尝试打开新连接并执行相同的事务


例如:好吧,也许是这样的:

public virtual void SubmitChanges()
{
    if (DataContext != null)
    {               
        try
        {
             DataContext.SubmitChanges();
        }
        catch (Exception whenILostMyConnection)
        {
             SubmitChanges(); //recall the sumbitChanges
        }
    }             
}

我会把它留在这里,以防有人像我一样正在寻找这个问题的答案。

options => options.EnableRetryOnFailure()添加到OnConfiguring配置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseSqlServer(
            @"Server=(localdb)mssqllocaldb;Database=EFMiscellanous.ConnectionResiliency;Trusted_Connection=True",
            options => options.EnableRetryOnFailure());
}

阅读更多此内容。

你可以在Windows Azure源代码中看到答案。Azure CRUD 操作通常会将它们放入循环中,该循环会多次重试执行相同的操作,从而导致某些特定异常。但是您必须非常小心,在大多数情况下,重试句柄会导致您的应用程序变慢。

最新更新