【问题标题】:Can calling ToList on a DbSet cause caching?在 DbSet 上调用 ToList 会导致缓存吗?
【发布时间】:2013-11-28 13:54:08
【问题描述】:

我正在使用以下代码重新填充来自 SqlDependency 的更改通知 ObservableCollection<T>

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);
}

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

【问题讨论】:

  • 你看过this one吗?似乎是一个类似的pb,它可能会有所帮助。

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


【解决方案1】:

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

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

this.AddRange(set);

【讨论】:

  • 正如我在问题中指出的那样,当我使用using (var dbContext = new XTimeDbContext()) 时,我没有缓存,只有当我使用类级别_dbContext 时,但var set = _dbContext.Set&lt;T&gt;.AsNoTracking().ToList(); this.AddRange(set); 工作得很好,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
相关资源
最近更新 更多