[英]Exception Handling in C# with Entity Framwork 4
我使用asp.net 4,c#和ef4。
我想知道從實體框架中捕獲通用異常的最佳方法是什么。
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語句從最特定的異常組織到最少,即:
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
}
不要那樣做。
您隱藏了可能嚴重影響應用程序可靠性的錯誤。 拋出異常是有原因的 ,只是繼續,就像沒有發生任何事情一樣是錯誤的。
你的方法無法按照承諾返回結果,這將影響使用它的所有代碼。 但調用方法不會知道異常,並且在最壞的情況下會繼續,因為沒有發生任何事情,因此會產生不希望的結果。
你應該只使用catch all
a)何時想要在層邊界處包裝異常(但包括原始異常)。
b)當異常傳播到頂層時(如果未捕獲異常,將終止您的應用程序)。
除此之外,只有在您可以處理它們時才捕獲異常 。 這意味着通過捕獲異常,您可以返回調用者期望的結果。
您在示例中捕獲的方式很糟糕,總是在某處以某種方式記錄異常,例如在文本文件或SMTPAppender上,您可以使用Log4Net並在很短的時間內以最少的編碼來運行它。
這樣說,這實際上取決於你是否想要以不同的方式處理不同的異常,例如,如果找不到文件你可以決定創建它或告訴用戶做某事,如果拋出更一般的異常你可能采取不同的行為。 ..
請記住,您應該將所有catch子句從更具體的catch子句放到更通用的子句中,在您的示例中,如果您有多個catch,那么您編寫的那個應該放在最后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.