我正在使用EF6.1,我想在抛出以下异常时将消息更改为更具系统特定的消息。
存储更新,插入或删除语句会影响意外的行数(0)
现在,我的问题是我似乎无法捕获异常?我尝试了以下方法,但我的断点似乎永远不会被抓住
public override System.Threading.Tasks.Task<int> SaveChangesAsync()
{
try
{
return base.SaveChangesAsync();
}
catch (System.Data.Entity.Core.OptimisticConcurrencyException e)
{
var a = e.Message;
}
catch (System.Data.DBConcurrencyException e)
{
var a = e.Message;
}
catch (Exception e)
{
var a = e.Message;
}
return null;
}
这不是抛出的异常吗?这很奇怪
答案 0 :(得分:2)
您正在执行异步方法。这意味着当您在返回的任务上调用await
或尝试使用await myTask;
你永远不会这样做,这意味着异常被抛出并被提升到你的调用堆栈。
如果要在自己的方法中捕获异常,则应将其语法更改为
public override async System.Threading.Tasks.Task<int> SaveChangesAsync()
{
try
{
return await base.SaveChangesAsync();
}
在覆盖SaveChangesAsync
时我会非常非常谨慎。 OptimisticConcurrencyException异常包含导致其StateEntries
属性出现乐观冲突的数据。用一个好消息替换它只会使决定如何处理特定错误变得更加困难,例如,决定覆盖或重新加载。
显示好消息最好留给控制器。