从实体框架中提取用户友好的错误消息
本文关键字:错误 消息 用户 实体 框架 提取 | 更新日期: 2023-09-27 18:04:39
我有以下代码在我的asp.net mvc web应用程序:-
try
{
var count = repository.changeDeviceSwitch(s.Switch.SwitchID, (Int32)s.GeneralSwitchTo, User.Identity.Name.Substring(User.Identity.Name.IndexOf("''") + 1));
repository.Save();
return Json(new { IsSuccess = "redirect", description = Url.Action("Details", new { id = s.GeneralSwitchTo }) }, JsonRequestBehavior.AllowGet);
}
catch (DbUpdateException exception)
{
return Json(new { IsSuccess = "custome", description = "Error occurred." + exception.InnerException.InnerException.Message.ToString() }, JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
return Json(new { IsSuccess = "custome", description = "Error occurred." }, JsonRequestBehavior.AllowGet);
}
将调用以下存储库方法:-
public int changeDeviceSwitch(int fromID , int toID, string username)
{
var currentdevices = tms.TMSSwitchPorts.Where(a => a.SwitchID == fromID);
int count = 0;
foreach (var d in currentdevices)
{
DeletePort(d, username);
//d.SwitchID = toID;
count++;
}
foreach (var d in currentdevices)
{
TMSSwitchPort tsp = new TMSSwitchPort() { SwitchID = toID, TechnologyID = d.TechnologyID, PortNumber = d.PortNumber };
InsertOrUpdatePort(tsp, username);
}
return count;
}
当前,如果DbUpdateException发生,用户将获得以下信息:-
当用户尝试在同一记录下添加一个已经存在的端口号时,将发生违反了PRIMARY KEY约束'PK_SwitchPortServer'。不能在对象'dbo.TMSSwitchPorts'中插入重复键。重复键值为(1484,e),语句结束。
此异常。(SwitchID + Portno)组合在数据库中是唯一的。这是纯粹的技术信息,所以我不确定是否有办法从实体框架中提取更用户友好的错误信息?还是我需要自己检查?
如何抛出自己的异常?
try
{
InsertOrUpdatePort(tsp, username);
}
catch (DbUpdateException e)
{
throw new Exception("Friendly message here", e)
}
更好的方法是定义自己的异常类来使用,而不仅仅是Exception
。