2012-11-15 40 views

回答

2

在保存更改期间连接中断时,您只会收到异常。在由于异常而未提交的事务中完成保存,并且EF不会将其当前更改设置为已完成。你可以简单地尝试在特定发生异常,再次保存更改 - EF会尝试打开一个新的连接,并执行相同的事务


为前: 好,也许是这样的:

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

好吧听起来不错,但是当我在ViewModel中并且它试图执行LINQ查询并因连接关闭或断开而失败时,我该怎么办?我已经注册了一个事件,当连接状态改变时触发,并且当我松动连接到DB时,它似乎不会触发。那么我如何处理这个问题呢? – Willem

+0

我并不是很擅长给出“好”的设计模式解决方案,但我认为如果你集中你的数据库操作方法,这样你就可以轻松地管理你的交易对数据库,因为,前创建一些适当的结果数据操纵器类,管理像SaveChanges,Commit等简单操作。 – m4ngl3r

0

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

相关问题