C# 捕获EF6中的并发异常,以将消息更改为更加用户友好
我使用的是EF6.1,我想在抛出以下异常时将消息更改为更系统特定的消息 存储更新、插入或删除语句影响了意外的行数(0) 现在,我的问题是我似乎无法捕捉异常?我尝试了以下方法,但我的断点似乎从未被捕获C# 捕获EF6中的并发异常,以将消息更改为更加用户友好,c#,asp.net,.net,entity-framework,entity-framework-6,C#,Asp.net,.net,Entity Framework,Entity Framework 6,我使用的是EF6.1,我想在抛出以下异常时将消息更改为更系统特定的消息 存储更新、插入或删除语句影响了意外的行数(0) 现在,我的问题是我似乎无法捕捉异常?我尝试了以下方法,但我的断点似乎从未被捕获 public override System.Threading.Tasks.Task<int> SaveChangesAsync() { try { return base.SaveChangesAsync(); } catch (Sys
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;
}
public override System.Threading.Tasks.Task SaveChangesAsync()
{
尝试
{
返回base.saveChangesSync();
}
捕获(System.Data.Entity.Core.OptimisticConcurrencyException e)
{
var a=e.消息;
}
catch(System.Data.dbconcurrency异常)
{
var a=e.消息;
}
捕获(例外e)
{
var a=e.消息;
}
返回null;
}
这不是抛出的异常吗??这很奇怪您正在执行一个异步方法。这意味着当您对返回的任务调用
await
或尝试使用await myTask检索结果时,将引发任何异常代码>
您从未这样做过,这意味着异常会被抛出并捕获到调用堆栈的更高位置
如果希望在自己的方法中捕获异常,应该将其语法更改为
public override async System.Threading.Tasks.Task<int> SaveChangesAsync()
{
try
{
return await base.SaveChangesAsync();
}
public override async System.Threading.Tasks.Task savechangessync()
{
尝试
{
return wait base.SaveChangesAsync();
}
但是,在重写savechangessync
时,我会非常小心。异常包含在其StateEntries
属性中导致乐观冲突的数据。用漂亮的消息替换它只会使决定如何处理特定错误变得更加困难,例如,决定重写或重新加载
显示一条好消息最好留给您的控制器。您不尊重关注点分离原则。关注点分离?“抛出异常以通知调用方发生错误”与“向用户报告错误”完全不同。这称为SoC。如下所述,我现在已更改此项,并将代码移到控制器Hanks。接受建议,将此项添加到控制器。再次感谢