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

Blazor应用中EF取消实体修改后避免SaveChanges提交的方法

解决Blazor中EF Core实体取消修改后仍被跟踪的问题

针对你遇到的Scoped上下文下,修改实体后取消更改但ChangeTracker仍保留变更记录、调用SaveChanges会同步到数据库的问题,有以下几种可行的解决方式:

  • 重新加载实体(推荐)
    使用EF Core的ReloadAsync方法直接从数据库拉取实体的最新状态,覆盖本地跟踪的实体,同时将其状态重置为Unchanged:

    await _yourDbContext.Entry(yourEntity).ReloadAsync();
    

    这个操作会彻底同步本地实体与数据库状态,清除所有未提交的变更记录。

  • 手动重置状态与原始值
    如果不想从数据库重新加载,可以先将实体的当前值恢复为ChangeTracker记录的原始值,再将状态设为Unchanged:

    var entityEntry = _yourDbContext.Entry(yourEntity);
    // 将当前属性值恢复为修改前的原始值
    entityEntry.CurrentValues.SetValues(entityEntry.OriginalValues);
    // 标记实体状态为未修改
    entityEntry.State = EntityState.Unchanged;
    
  • 脱离上下文跟踪
    如果后续不需要再跟踪该实体,可以直接将其从ChangeTracker中移除:

    _yourDbContext.Entry(yourEntity).State = EntityState.Detached;
    

    注意:脱离跟踪后,该实体后续的属性变更不会被EF Core监控,若需再次跟踪需要手动调用Attach方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:29:55