EF Core 3.1更新两张关联表仅Paycheck生效Tax表无更新无报错
问题根因
你的代码存在核心逻辑错误:var taxEntity = context.Paycheck.Include(t => t.Tax).FirstOrDefault(t => t.TaxId == taxId); 这行代码返回的是Paycheck类型对象,而非Tax类型对象。你给taxEntity.Deleted赋值本质还是修改Paycheck表的字段,完全没有操作到Tax表的实体,所以Tax表不会有任何更新,也不会抛出错误。
同时你的代码存在冗余查询问题,先后三次访问数据库,可以合并为一次查询优化性能。
修复后代码
public void DeletePaycheck(int PaycheckID) { using (var context = new FinancialContext()) { // 一次查询同时加载Paycheck及关联的Tax对象 var paycheckEntity = context.Paycheck .Include(p => p.Tax) .FirstOrDefault(p => p.PaycheckId == PaycheckID); if (paycheckEntity != null) { paycheckEntity.Deleted = true; // 操作关联的Tax实体的Deleted字段 if (paycheckEntity.Tax != null) { paycheckEntity.Tax.Deleted = true; } context.SaveChanges(); } } }
补充说明
- 如果你业务逻辑中每个Paycheck必然关联一个Tax记录,可以去掉
paycheckEntity.Tax的非空判断,或者改用First方法在查询不到对应Paycheck时直接抛出异常,避免静默失败。 - 原代码中如果TaxId对应的Paycheck记录不存在,
taxEntity会为null,也会导致Tax表无更新,符合你遇到的无报错但未更新的现象。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

