0

我使用 blazor 服务器端并将我的 DbContext 注册为瞬态,我也将数据访问类注册为瞬态,但如果参数未更改,EF Core 始终返回缓存数据,除非在查询之前有更新,否则它会返回新数据。

每次调用每个数据访问方法而不是依赖注入时,我都尝试创建一个 DbContext 实例,但它也返回缓存的数据。

 services.AddDbContext<StoreContext>(options =>
          options.UseSqlServer(
              Configuration["Data:StoreProducts:ConnectionString"]), ServiceLifetime.Transient);

services.AddTransient<DataAccess.Dal>();

这是达尔:

public UserLock GetByUserName(string userName)
    {           
           return context.UserLocks.FirstOrDefault(l => l.User.ToLower() == userName.ToLower());                       
    }

或者:

public UserLock GetByUserName(string userName)
    {
        using (var db = new StoreContext())
        {
            return context.UserLocks.FirstOrDefault(l => l.User.ToLower() == userName.ToLower());
        }
    }

如何解决这个问题呢?

4

2 回答 2

0

如果您只是想获取用户并返回它,您可以在 linq 查询中添加AsNoTracking()以防止 EF 使用缓存的内容。

于 2021-10-29T18:19:55.233 回答
0

我这样解决了我的问题:

 public UserLock GetByUserName(string userName)
    {           
        UserLock ulock = context.UserLocks.FirstOrDefault(l => l.User.ToLower() == userName.ToLower());
        context.Entry(ulock).Reload();
        return ulock;
    }
于 2019-07-24T09:27:31.867 回答