在实体框架中使用DbSet <tentity> .Local属性</tentity>

时间:2015-04-18 11:46:46

标签: c# entity-framework caching local dbset

关注MSDN documentation我们可以使用 Local 属性直接从上下文获取本地/缓存数据,而无需向数据源发出其他请求:

  

获取一个ObservableCollection,它表示此集合中所有已添加,未更改和已修改实体的本地视图。   
(...)
  通过使用数据填充集合,此属性可用于数据绑定,例如,使用Load扩展方法,然后通过此属性绑定到本地数据。

问题是,代码无效( Local 为空):

context.SampleEntities.Select(x => new { x.A, x.B }).Load();
// context.SampleEntities.Local.Count is 0

但在这种情况下,它似乎正常工作:

context.SampleEntities.Load();
// context.SampleEntities.Local.Count is not 0

也许有人可以解释使用 Local 属性的正确方法是什么?
更重要的是,如何将它与部分加载的实体一起使用,如上面的情况?

1 个答案:

答案 0 :(得分:7)

这是预期的行为。本地缓存在DbContext对象的生命周期中由您从数据库加载的实体。查询:

context.SampleEntities.Select(x => new { x.A, x.B })

您正在向您的应用程序内存加载没有SampleEntity对象,但只加载它的A和B。选择也转换为sql查询以限制从查询返回的行,从而提高性能。