Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.MVC中的异常_Asp.net Mvc_Database_Exception - Fatal编程技术网

Asp.net mvc ASP.MVC中的异常

Asp.net mvc ASP.MVC中的异常,asp.net-mvc,database,exception,Asp.net Mvc,Database,Exception,我在这里再次提出关于MVC的另一个问题 这是交易。我有一个带有Id和名称的简单表/类。名称被支持为唯一的,并且建模方式与数据库中的相同 我创建了控制器,一切正常。但如果我试图插入一个已经存在的名称,则应该抛出一个异常。我只是没有找到正确的异常类型和名称空间。错误一定来自数据库,所以 有什么想法吗 谢谢请声明您自己的异常类 public class DuplicateNameException : Exception {} 您可能希望添加一些构造函数以确保消息得到适当设置,但不需要比这更困难 在

我在这里再次提出关于MVC的另一个问题

这是交易。我有一个带有Id和名称的简单表/类。名称被支持为唯一的,并且建模方式与数据库中的相同

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

有什么想法吗


谢谢

请声明您自己的异常类

public class DuplicateNameException : Exception {}
您可能希望添加一些构造函数以确保消息得到适当设置,但不需要比这更困难

在OP澄清后更新:因此DB抛出异常,您只想让问题更明显。在本例中,我建议您将DB异常保留为
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有没有办法事先确定数据库生成了哪个错误?Thanks@George,我不太清楚你的问题。这是一个数据库层已经抛出的异常,您希望为其提供更好的消息,还是希望抛出的新异常?Hello JS。数据库层已经抛出了我的异常。我管理它的方法是查找特定的数据库错误号并添加特定的消息。这不是最漂亮的方式,但它很有效。有什么想法吗?