ASP.NET实现数据不存在新增、存在更新功能时新增操作失效问题
问题原因
- 代码执行顺序错误:当前代码先执行更新逻辑的属性判断,再执行新增的null判断。当目标数据不存在时,
FirstOrDefault会返回null,此时直接访问itemLocQuantity.ItemId会触发空引用异常(NullReferenceException),程序直接报错终止,后续的新增逻辑完全没有执行机会。 - 更新逻辑的判断冗余:
FirstOrDefault的查询条件已经限定了匹配ItemId和LocationId的结果,只要itemLocQuantity不为null,天然就满足ID匹配条件,不需要重复判断。
修复方案
调整逻辑执行顺序,优先判断查询结果是否为空,再分别走新增、更新逻辑,参考代码如下:
var itemLocQuantity = objERPMicroDbEntities.ItemLocationDatas.FirstOrDefault(items => items.ItemId == item.ItemId && items.LocationId == item.LocationId); // 优先判断是否为空,走新增逻辑 if (itemLocQuantity == null) { itemLocQuantity = new ItemLocationData(); itemLocQuantity.ItemId = item.ItemId; itemLocQuantity.Quantity = item.QuantityReceive; itemLocQuantity.LocationId = item.LocationId; objERPMicroDbEntities.ItemLocationDatas.Add(itemLocQuantity); } // 非空直接走更新逻辑,无需重复判断ID匹配 else { itemLocQuantity.Quantity += item.QuantityReceive; } // 统一提交变更到数据库 objERPMicroDbEntities.SaveChanges();
本次修复核心调整点:
- 调换新增、更新逻辑的执行顺序,避免空值访问报错
- 移除冗余的ID匹配判断,简化代码逻辑
- 补充统一的数据库变更提交操作,确保新增/更新的结果都能持久化到数据库
内容的提问来源于stack exchange,提问作者D37612345
相关产品推荐
相关产品推荐

