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
相关产品推荐
相关产品推荐

