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

C#调试时仓库入库系统控制器CartItems返回0问题求助

库存管理系统入库流程代码问题修复

现有代码核心问题

  • 主键未生成就查询:你调用_context.Add(receiving)之后还没有执行保存操作,receiving.Receiving_Id作为主键还没有生成有效值(数值类型默认是0),用这个值去匹配ReceivedItems.Id自然查询不到任何数据,返回结果为0。
  • 查询逻辑关联错误:ReceivedItems是入库单对应的明细条目,关联外键应该是入库单ID,而非自身主键等于入库单ID,你的过滤条件写反了关联关系。
  • 库存更新逻辑错误:你每次循环都新建Product对象,而不是查询当前要入库的已有商品再更新可用库存,会导致重复生成商品数据,且每次循环都覆盖receiving.Product属性,最终只有最后一条明细的修改会生效。
  • 操作顺序错误:入库明细应该是和入库单一起提交到后台的,不需要新增入库单之后再去数据库查询明细,直接用参数中绑定的receiving.Items即可。

修复后代码示例

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Receiving_Id,Supplier_Name,DateReceived,Receiver_Name,Receiver_Signature,Driver_Name,Driver_Signature,Items")] Receiving receiving)
{
    if (ModelState.IsValid)
    {
        receiving.DateReceived = DateTime.UtcNow;
        // 先保存入库单获取生成的主键
        _context.Add(receiving);
        await _context.SaveChangesAsync();

        // 遍历本次入库的所有明细条目
        foreach (var item in receiving.Items)
        {
            // 查询对应商品的已有记录
            var product = await _context.Products.FirstOrDefaultAsync(p => p.Id == item.Product_Id);
            if (product != null)
            {
                // 可用库存累加本次收货数量,不是直接赋值
                product.AvailableQuantity += item.Received_Quantity;
                _context.Update(product);
            }
        }
        // 保存库存修改
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }
    return View(receiving);
}

额外注意点

  • 如果你的入库明细Items没有自动绑定到receiving对象,需要检查前端提交的字段名是否和模型属性名匹配,或者调整Bind属性包含的字段。
  • 库存更新需要做累加操作,不要直接赋值,否则会覆盖之前的库存数量。

内容的提问来源于stack exchange,提问作者Raeesa Mahomed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:36:04