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

