如何在不处理上下文的情况下刷新实体框架连接

Chr*_*ide 8 c# entity-framework

在我们的应用程序中使用Entity Framework几年后,我们公司已开始向用户部署笔记本电脑.笔记本电脑正在现场使用,可直接连接到我们的网络.

从那时起,我们看到我们程序中的崩溃大量增加,异常日志显示

System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. 
(provider: Session Provider, error: 19 - Physical connection is not usable)
Run Code Online (Sandbox Code Playgroud)

我的理论是,这个问题源于这样一个事实,即与PC不同,笔记本电脑会进入睡眠状态.我认为当笔记本电脑进入休眠状态时,网络适配器被禁用,并在重新启动时重新启用.我认为我们的程序仍在尝试使用不再存在的连接与服务器通信.

所以,我的想法是回应:

Microsoft.Win32.SystemEvents.PowerModeChanged
Run Code Online (Sandbox Code Playgroud)

我可以检测到它什么时候醒来并刷新连接.麻烦的是,我似乎唯一能做的就是处理当前的DbContext并实例化一个新的DbContext.

这样做的问题是任何未提交的更改都会丢失.如果用户整天都在更新记录,他们就会失去工作.不仅如此,我们还必须完成所有应用程序和所有视图模型,并在编辑模式中添加一些带有通知的用户.根本不漂亮.

我的第二个想法是创建一个克隆DbContext的方法.当计算机醒来时,我可以创建一个新的DbContext并在处理之前复制旧的DbContext ...但是我们的一些数据模型非常庞大,并且为每个模型创建深度克隆方法将是一项艰巨的任务.

在我看来,这可能仍然是我们必须采取的方式......但是我不会检查是否有人知道如何刷新Entity Framework DbContext的连接而不会丢失它的当前状态.

我很感激任何人可能有的建议.

小智 0

我只是想发表评论,但我没有足够的声誉点来做到这一点,所以无论如何我想知道是否无法使用实体框架在断开连接的状态下工作?也许下面链接中的文章可以提供帮助:

https://msdn.microsoft.com/en-us/data/jj592676.aspx