【问题标题】:Exceptions in ASP.MVCASP.MVC 中的异常
【发布时间】:2010-05-26 02:56:49
【问题描述】:

我又来这里问另一个关于 MVC 的问题了。

这是交易。我有一个带有 ID 和名称的简单表/类。名称应该是唯一的,并且在 DB 中被建模。

我创建了我的控制器,一切正常。但是如果我尝试插入一个已经存在的名称,则应该抛出一个异常。我只是没有找到正确的异常类型及其名称空间。错误一定来自数据库,所以...

有什么想法吗?

谢谢

【问题讨论】:

  • “我只是没有找到正确的异常类型及其命名空间”是什么意思。
  • 我不想抛出一个带有消息的通用异常:“存在数据库错误”。我想抛出一个特定的异常,例如...“违反唯一键 - 名称应该是唯一的”。

标签: asp.net-mvc database exception


【解决方案1】:

只需声明您自己的异常类。

public class DuplicateNameException : Exception {}

您可能需要添加一些构造函数以确保正确设置消息,但这并不需要比这更困难。

在 OP 澄清后更新:所以数据库抛出异常,你只是想让问题更明显。在这种情况下,我建议您将数据库异常保留为InnerException,并重新抛出更好的东西。所以声明DuplicateNameException 是这样的:

public class DuplicateNameException : Exception
{
    public DuplicateNameException(DBException ex)
        : base("Duplicate name!", ex)
    {}
}

那么你需要在哪里做DB操作:

try
{
    DoDatabaseOperation();
}
catch (DBException ex)
{
    if (IsDuplicateNameException(ex))
    {
        throw new DuplicateNameException(ex);
    }
    else
    {
        throw; // use the no-argument form of "throw" to ensure you don't break the stack trace!
    }
}

【讨论】:

  • 当然可以,但是 MVC 有没有办法先验地识别数据库生成的错误?谢谢
  • @George,我不清楚你的问题。这是您想要更好消息的数据库层已经抛出的异常,还是您希望抛出的新异常?
  • 你好 JS。数据库层已经抛出了我的异常。我管理它的方法是查找特定的数据库错误号并添加特定的消息。不是最漂亮的方式,但它有效。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-20
  • 2017-04-27
  • 2018-03-20
  • 2020-06-26
  • 1970-01-01
  • 2012-08-13
  • 2021-09-16
  • 1970-01-01
相关资源
最近更新 更多