实体框架 - 自定义异常的DbUpdateException

时间:2011-11-15 14:20:34

标签: entity-framework exception

我正在使用Entity Framework,当从dbContext.SaveChanges()抛出DbUpdateException时,如何创建自定义异常并抛出它?

我是否会在每个可抛出的SQL约束上创建一个条件:

if (e.InnerException.InnerException.Message.Contains("UNIQUE KEY"))
{
     throw new CustomException("message");
}

1 个答案:

答案 0 :(得分:2)

编辑:这种方法对我来说很有意义。如果您知道您的应用程序/数据库将会出现特定错误,并且它将帮助您或您的用户拥有一个特定的自定义异常类型,以便快速识别哪种情况会有些复杂或特定的情况,那么绝对是的。最好使用异常类型和异常消息来使错误尽可能清晰。我下面的代码是一个比你似乎深入研究的更简单的例子。我没有让其他代码以空引用异常或其他后果结束,而是用throw new DatabaseDataNotFoundException("Cannot find ServerAppConfiguration value for {0}", key);击败了所有内容。

只需创建自己的异常类,继承自Exception,这是我用于此目的的自定义异常:

public class DatabaseDataNotFoundException : Exception
{
    public DatabaseDataNotFoundException() : base() { }

    public DatabaseDataNotFoundException(string message) : base(message) { }

    public DatabaseDataNotFoundException(string message, params object[] args)
        : base(String.Format(CultureInfo.CurrentCulture, message, args)) { }

    public DatabaseDataNotFoundException(string message, Exception inner)
        : base(message, inner) { }

    public DatabaseDataNotFoundException(string message, Exception inner, params object[] args)
        : base(String.Format(CultureInfo.CurrentCulture, message, args), inner) { }

    protected DatabaseDataNotFoundException(SerializationInfo info, StreamingContext context) : base(info, context) { }
}

然后您的代码变为:

if (e.InnerException.InnerException.Message.Contains("UNIQUE KEY"))
{
    throw new DatabaseDataNotFoundException("message");
}