从实体框架中提取用户友好的错误消息

本文关键字:错误 消息 用户 实体 框架 提取 | 更新日期: 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