首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF核心中的UpdateException在哪里?

EF核心中的UpdateException在哪里?
EN

Stack Overflow用户
提问于 2022-11-19 16:39:48
回答 1查看 28关注 0票数 1

我正在将我的旧EF6代码移植到EF,并且遇到了在以下代码中找不到UpdateException的问题:

代码语言:javascript
复制
internal void SetErrors(DbUpdateException ex)
{
    databaseErrors.Clear();

    if (!(ex.InnerException is UpdateException) ||
        !(ex.InnerException.InnerException is SqlException))
        return;

    var sqlException = (SqlException)ex.InnerException.InnerException;

    for (int i = 0; i < sqlException.Errors.Count; i++)
    {
        var sqlError = sqlException.Errors[i];

        if (databaseErrors.ContainsKey(sqlError.Number))
            continue;

        if (!string.IsNullOrWhiteSpace(sqlError.Procedure))
        {
            databaseErrors.Add(sqlError.Number, string.Format("{0}: {1}", sqlError.Procedure, sqlError.Message));
        }
        else
        {
            databaseErrors.Add(sqlError.Number, sqlError.Message);
        }
    }
}

Intellisense建议使用System.Data,所以我添加了这个名称空间,但仍然找不到。我在哪能找到这门课?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-19 21:59:35

它不见了。已删除。消失了。被替换了。渴望峡湾。它是一个死异常类型。这是一个前例外的

注意到the "Applies to" table in the documentation page for System.Data.UpdateException说它只存在于.NET Framework3.5到4.8之间,而不是 .NET Core或.NET 5+:

The Microsoft.EntityFrameworkCore.DbUpdateException replaces itEntries集合属性是UpdateException.StateEntries的模拟。

不能保证DbUpdateException.InnerException将是SqlException。如果您确实想检查InnerException,那么在一个循环中执行它,而不是只检查1或2个级别的深度:

代码语言:javascript
复制
static SqlException? GetFirstInnerSqlExceptionOrNull( Exception? ex )
{
    while( ex != null )
    {
        if( ex is SqlException sqlEx ) return sqlEx;
        ex = ex.InnerException;
    }

    return null;
}

用法(给定您的代码后):

代码语言:javascript
复制
internal void SetErrors( DbUpdateException ex )
{
    if( GetFirstInnerSqlExceptionOrNull( ex ) is SqlException sqlEx )
    {
        foreach( SqlError err in sqlEx.Errors )
        {
            // stuff
        }
    }
    

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74501786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档