Gib*_*boK 3 c# error-handling entity-framework entity-framework-4
我使用asp.net 4,c#和ef4.
我想知道从实体框架中捕获通用异常的最佳方法是什么.
Exception它是合适的吗?谢谢你的时间.
try
{
context.DeleteObject(myLockedContent);
context.SaveChanges();
}
catch (Exception)
{
e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)
捕获通用异常并取消它们很少有好处.有例外可以帮助您确保代码可以正常运行.
您可以捕获特定的异常类型,就像您对泛型一样(尽管您的示例中已经错过了标识符),因此:
catch (OptimisticConcurrencyException ex)
{
// Do some real work to resolve the exception
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
不要那样做.
您隐藏了可能严重影响应用程序可靠性的错误.抛出异常是有原因的,只是继续,就像没有发生任何事情一样是错误的.
你的方法无法按照承诺返回结果,这将影响使用它的所有代码.但调用方法不会知道异常,并且在最坏的情况下会继续,因为没有发生任何事情,因此会产生不希望的结果.
你应该只使用catch all
a)何时想要在层边界处包装异常(但包括原始异常).
b)当异常传播到顶层时(如果未捕获异常,将终止您的应用程序).
除此之外,只有在您可以处理它们时才捕获异常.这意味着通过捕获异常,您可以返回调用者期望的结果.