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

调用ExecuteUpdate()后如何获取更新后的数据库记录?

问题解决:EF Core ExecuteUpdateAsync后上下文查询仍返回旧值

ExecuteUpdateAsync是EF Core的无跟踪批量更新操作,它直接发送SQL修改数据库数据,但不会同步更新当前DbContext缓存里的实体对象。你测试全程共用同一个上下文,该用户实体已经被上下文追踪缓存,所以后续查询时EF Core直接返回缓存的旧值,不会去数据库拉取最新数据。

解决方法有三种:

  • 禁用跟踪查询
    用AsNoTracking()绕开一级缓存,直接从数据库获取最新值:

    int updatedValue = _domainContext.User.AsNoTracking().Single(x => x.Id == userId).NumberOfFollowing;
    
  • 手动刷新实体
    如果需要保留实体跟踪,可以先找到缓存里的实体,调用ReloadAsync()刷新数据:

    var user = _domainContext.User.Single(x => x.Id == userId);
    await _domainContext.Entry(user).ReloadAsync();
    int updatedValue = user.NumberOfFollowing;
    
  • 使用新上下文实例
    更新后创建新的DbContext来查询,确保拿到数据库最新状态:

    using var newContext = new DomainContext(_dbContextOptions);
    int updatedValue = newContext.User.Single(x => x.Id == userId).NumberOfFollowing;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:19:54