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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:39:01