为什么有些例外只有几个层次

本文关键字:有几个 层次 为什么 | 更新日期: 2023-09-27 18:15:48

我有一个简单的实体插入如下:

using (var db = new MyContext())
{
    var item = new Artist();
    TryUpdateModel(item);
    if (ModelState.IsValid)
    {
        db.Artist.Add(item);
        try
        {
            db.SaveChanges();
            gvArtist.DataBind();
            gvArtist.Visible = true;
        }
        catch (Exception e)
        {
            Master.Warning = e.InnerException.InnerException.Message;
        }
    }
}

e。Message和e.InnerException.Message都等价于:

"更新条目时发生错误。有关详细信息,请参阅内部异常。"

但是,e.InnerException.InnerException.Message给出了我正在寻找的异常,它是:

"违反UNIQUE KEY约束'UQ_artist_Cuid'。无法在对象'dbo.artist'中插入重复键。重复键值为(11)。语句已被终止。"

我担心错过其他异常,或者如果我只保留

会引起异常。
Master.Warning = e.InnerException.InnerException.Message;

为什么有些例外只有几个层次

你的恐惧完全是有根据的。这就是你要找的东西。

catch (Exception ex)
{
    while (ex.InnerException != null)
    {
        ex = ex.InnerException;
    }
    Master.Message = ex.Message;
}

错误深度不同的原因是错误可能发生在代码的不同部分,并且它们可能通过将它们包装在其他异常中的不同数量的方法冒出来。你不能计划让他们来自一个特定的层次。