Entity Framework - 将DbUpdateException转换为自定义异常

3

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

我需要在每个可能抛出SQL约束的条件上创建一个条件:

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

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");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接