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

C# MVC中context.SaveChanges()无法持久化数据至数据库

问题排查与修复方案

1. 调整实体修改顺序

你的代码先设置实体状态为Modified再修改字段值,EF无法追踪到该变更。由于Find方法已将实体加载到上下文并处于追踪状态,无需手动执行Attach和设置EntityState.Modified,直接修改字段后保存即可:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Release(int id)
{
    Publicacao publicacao = db.Publicacao.Find(id);
    if (publicacao == null)
    {
        return RedirectToAction("Index");
    }
    // 先修改字段值
    publicacao.liberado = 1;
    // 直接保存变更
    db.SaveChanges();
    return RedirectToAction("Index");
}

2. 验证上下文实例正确性

确认db是当前请求的专属上下文实例,避免使用共享或已被释放的上下文,否则变更无法正常提交到数据库。

3. 检查字段映射匹配度

确保模型中liberado字段与数据库对应字段的名称、数据类型完全一致(比如数据库字段是否为int类型,拼写是否无误差)。可通过开启EF的SQL日志,查看SaveChanges时生成的Update语句是否包含liberado字段,确认映射是否生效。

4. 排查事务冲突

检查是否存在未提交的事务,或者其他代码对同一实体进行了操作并回滚事务,导致当前变更被覆盖。

内容的提问来源于stack exchange,提问作者Carlos Felipe Queiroz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:46:06