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

时间:2014-05-21 16:23:23

标签: c# entity-framework asp.net-mvc-4

我的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)组合在数据库中是唯一的。这是纯粹的技术消息,所以我不确定是否有办法从实体框架中提取更加用户友好的错误消息?或者我需要自己做检查?

1 个答案:

答案 0 :(得分:1)

如何抛出自己的异常?

try
{
    InsertOrUpdatePort(tsp, username);
}
catch (DbUpdateException e)
{
    throw new Exception("Friendly message here", e)
}

更好的是定义您自己的异常类,而不仅仅是Exception