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

ASP.NET MVC中更新多表记录时Approval_Status修改失效问题求助

ASP.NET MVC EF更新数据不生效解决方案

问题根因

  • 你代码中new ApprovalParty()是创建了全新的待插入实体,并未关联数据库中已存在的、Id等于PartyId的目标记录
  • 未将更新操作告知EF上下文,SaveChanges()感知不到需要执行的SQL动作,因此更新不会生效

正确实现代码

public ActionResult ApproveRequest(int? id)
{
    // 先判断入参是否合法
    if (!id.HasValue)
    {
        return RedirectToAction("Index");
    }

    // 查询对应的ApprovalProcess记录,避免空引用异常
    var approvalProcess = db.ApprovalProcess.FirstOrDefault(x => x.Req_Id == id.Value);
    if (approvalProcess == null)
    {
        return RedirectToAction("Index");
    }
    int partyId = approvalProcess.Id;

    // 查询需要更新的ApprovalParty目标记录
    var approvalParty = db.Approval_Parties.FirstOrDefault(x => x.Id == partyId);
    if (approvalParty != null)
    {
        // 修改字段值
        approvalParty.Approve_Status = true;
        // 可选:补充审批时间
        approvalParty.Approved_Date = DateTime.Now;
    }

    // EF会自动追踪实体的修改,调用SaveChanges即可提交更新
    db.SaveChanges();
    return RedirectToAction("Index");
}

可选优化方案(EF Core 7+ 适用)

如果你的项目使用EF Core 7及以上版本,可以用ExecuteUpdate实现无需查询的直接更新,性能更高:

public ActionResult ApproveRequest(int? id)
{
    if (!id.HasValue)
    {
        return RedirectToAction("Index");
    }

    // 单条语句直接更新,不需要先查询实体到内存
    db.Approval_Parties
        .Where(p => p.Id == db.ApprovalProcess.Where(ap => ap.Req_Id == id.Value).Select(ap => ap.Id).FirstOrDefault())
        .ExecuteUpdate(p => p.SetProperty(x => x.Approve_Status, true)
                            .SetProperty(x => x.Approved_Date, DateTime.Now));

    return RedirectToAction("Index");
}

内容的提问来源于stack exchange,提问作者smc develpments

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:36:02