我使用asp.net 4,c#和ef4。在C#中使用實體框架異常處理4
我想知道什麼是捕獲實體框架中的泛型異常的最佳方法。
- 目前我用
Exception
它是合適的嗎? - 如何捕獲更具體的?
謝謝你的時間。
try
{
context.DeleteObject(myLockedContent);
context.SaveChanges();
}
catch (Exception)
{
e.Cancel = true;
}
我使用asp.net 4,c#和ef4。在C#中使用實體框架異常處理4
我想知道什麼是捕獲實體框架中的泛型異常的最佳方法。
Exception
它是合適的嗎?謝謝你的時間。
try
{
context.DeleteObject(myLockedContent);
context.SaveChanges();
}
catch (Exception)
{
e.Cancel = true;
}
捕獲泛型異常並取消它們很少有用。例外情況可以幫助您確保代碼可以正確執行。
你可以這樣趕上就像你有通用(雖然與標識符你已經錯過了你的例子)具體的異常類型:
catch (OptimisticConcurrencyException ex)
{
// Do some real work to resolve the exception
}
在catch語句中指定的異常類型告訴運行時趕上具體的和任何兒童例外。因此,您需要從最具體的例外情況中將您的匯票發票組織到最低程度,即:
catch (OptimisticConcurrencyException ex)
{
// Do some real work to resolve the specific exception
}
...
catch (Exception ex)
{
// Do some real work to resolve the generic 'catch-all' exception
}
你在你的例子正趕上方式是不好的,總是記錄異常的地方,並以某種方式,例如在一個文本文件或一個SMTPAppender,您可以使用log4net的,並得到它在很短的時間內運行與最小編碼從你身邊。
這樣說,它的確取決於您是否想要以不同的方式處理不同的異常,例如,如果找不到文件,您可以決定創建它或告訴用戶執行某些操作,如果拋出更一般的異常可能會採取不同的行動...
只是要記住,你應該把所有的catch子句從更具體到更通用的一個,在你的例子中,如果你有多個catch,你寫的應該放在結束。
不要這樣做。
您在隱藏可能嚴重影響應用程序可靠性的錯誤。 由於某種原因引發的例外,只是繼續就像沒有發生任何事情是錯誤的。
你的方法不能按照承諾返回結果,這會影響所有使用它的代碼。但調用方法不會知道異常情況,並且在最壞的情況下會繼續,因爲什麼也沒有發生,因此產生了不希望的結果。
,才應使用捕捉所有
一)想時,在包層邊界異常(但確實包含原始異常)。 b)當異常傳播到頂層時(如果異常未被捕獲,它將終止你的應用程序)。
除此之外,只捕獲異常時,你可以處理它們。這意味着,通過捕獲異常,您可以返回調用者期望的結果。
恕我直言'InvalidOperationException'是一個不好的例子,因爲它幾乎永遠不能被處理。 (幾乎可以被誤用) – jgauffin 2011-03-11 10:12:39
@jgauffin:這只是一個更具體的例外情況,並不是指令。爲什麼不建議更好的?隨意編輯答案放置它。 – Lazarus 2011-03-11 10:19:20
完成。 :)正確處理'OptimisticConcurrencyException'有點容易 – jgauffin 2011-03-11 10:31:03