2011-12-07 59 views
5

在我當前的項目中,我們使用實體框架,並在此上下文中存儲來自遠程系統的數據。當我嘗試保存對象時,我需要可靠地判斷一個異常是否可以從中恢復。實體框架 - 如何檢測可恢復和不可恢復的異常

爲了澄清,通過「恢復」我的意思是,簡單地嘗試操作稍後將是安全的,並可能成功。這將包括網絡連接問題,數據庫服務器重新啓動或類似情況。

在此上下文中的不可恢復基本上是其他任何內容,包括完整性約束和內部實體框架錯誤(數據庫與EF模型不同步)。有人可能會認爲,如果某人「修復」了數據,可能會從中恢復某些完整性約束,但在這種情況下,只會有一名作者。

是否有將來自實體框架的異常分類到這兩個類別之一的可靠方法?

回答

2

我認爲你必須拿出你自己的,你願意來測試和處理異常的列表。在任何兩種環境中,您可以分類爲可恢復或不可恢復的例外列表可能不會相同。這就是說,也許你可以從這裏開始:

Where to find ADO.NET Entity Framework error list?

+0

即使找到異常列表並找出它們何時可以拋出也不是一件容易的事。我正在這樣做,但我只是希望別人之前會有... – SoftMemes

0

檢查下面的文章 -

http://msdn.microsoft.com/en-us/library/bb738618.aspx

http://msdn.microsoft.com/en-us/library/bb336792.aspx

http://msdn.microsoft.com/en-us/library/system.data.optimisticconcurrencyexception.aspx

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/07/02/10564.aspx

我敢肯定比OptimisticConcurrencyException更多的是從.SaveChanges()提出的 - 使用一個

try { 
} catch(ExceptionType1) { 
} catch(ExceptionType2) { 
} catch(ExceptionType3) { 
} 

語句來捕獲不同的異常...

+0

我很抱歉,但4個鏈接到OptimisticConcurrencyException變化是有很大幫助沒有。這就是我需要的「其他例外」清單,以及它們可以拋出時的所有條件。 – SoftMemes

+0

好吧,顯然這裏沒有太多的信息 - 所以建立一個try catch並模仿可能發生的不同類型的異常 - 關閉你的數據庫,把一些破碎的類型轉換成存儲過程... – Spikeh

+0

爲什麼顯然? MSDN文檔有一個方法可以拋出的異常部分,但不幸的是它很少適當地填充。 – SoftMemes