EF Core继承抽象类实体保存子集合触发DbUpdateConcurrencyException
解决Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException:WHERE Id=0导致更新无匹配行问题
问题现象
- 触发
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException异常,错误信息:数据库操作预期影响1行但实际影响0行 - 定义两类一对多实体关系:
- 普通实体
Pie与PieSlice:保存Pie时EF Core能生成正确SQL,PieSlice可正常保存 - 抽象基类
Fruit及其子类Apple,关联FruitSlice:保存Apple时,生成的FruitSlice更新SQL中WHERE条件为Id=0,而主键Id不可能为0,导致无匹配行触发异常
- 普通实体
排查过程
- 编写极简测试案例验证EF Core实体配置,测试案例可正常运行,排除EF Core本身的映射配置问题
- 逐步排查第三方依赖,最终定位到
Detached.MapperNuGet包的配置异常
解决方法
恢复Detached.Mapper原有配置属性后,异常消失,FruitSlice的更新SQL生成正常,可正确匹配主键执行更新
内容的提问来源于stack exchange,提问作者Adam Hey
相关产品推荐
相关产品推荐

