You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移EF6代码至EF Core时,UpdateException类未找到的问题

EF Core中找不到UpdateException的解决方案

EF6中的UpdateException是Entity Framework 6专属类型,在EF Core里已经被完全移除,所以无论添加哪个命名空间都无法找到它,你需要调整原有的错误处理逻辑。

核心逻辑调整说明

在EF6中,DbUpdateException的InnerException会嵌套UpdateException,再内层才是SqlException;但EF Core简化了这个结构,数据库相关的错误(比如SQL Server的SqlException)会直接作为DbUpdateException的InnerException,不需要再判断中间的UpdateException。

修改后的代码

internal void SetErrors(DbUpdateException ex)
{
    databaseErrors.Clear();

    // 直接检查InnerException是否为SqlException
    if (!(ex.InnerException is SqlException sqlException))
        return;

    foreach (SqlError sqlError in sqlException.Errors)
    {
        if (databaseErrors.ContainsKey(sqlError.Number))
            continue;

        var errorMessage = string.IsNullOrWhiteSpace(sqlError.Procedure)
            ? sqlError.Message
            : $"{sqlError.Procedure}: {sqlError.Message}";

        databaseErrors.Add(sqlError.Number, errorMessage);
    }
}

补充说明

  • 原EF6的UpdateException位于System.Data.Entity.Core命名空间,但这个命名空间在EF Core中不存在,所以无需尝试添加
  • 如果你使用的是非SQL Server的数据库,对应的异常类型会是数据库驱动提供的专属异常(比如NpgsqlException for PostgreSQL),需要对应调整判断逻辑

内容的提问来源于stack exchange,提问作者Ivan-Mark Debono

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:55:31