可以在DbSet上调用ToList导致缓存吗?

时间:2013-11-28 13:54:08

标签: entity-framework caching entity-framework-6 sqldependency

我使用以下代码从ObservableCollection<T>重新填充SqlDependency更改通知:

var set = _dbContext.Set<T>().ToList();
this.AddRange(set);

在这种情况下,OnChange事件正确触发,但列表重新填充的内容与之前相同。现在我使用以下第二个DbContext来填充列表,如下所示,现在列表在更改后始终是最新的:

using (var dbContext = new XTimeDbContext())
{
    var set = dbContext.Set<T>().ToList();
    this.AddRange(set);
}

我能想到的唯一区别是第一种方法的查询结果是缓存的。如果是这样,我该如何防止这种情况?如果没有,为什么列表没有正确更新?

1 个答案:

答案 0 :(得分:1)

使用AsNoTracking()方法(here)阻止实体缓存:

var set = _dbContext
    .Set<T>()
    .AsNoTracking()
    .ToList();

this.AddRange(set);