迁移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
相关产品推荐
相关产品推荐

