7

按照MSDN 文档,我们可以使用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属性的正确方法是什么?
更重要的是,如何将它与部分加载的实体一起使用,就像上面的例子一样?

4

1 回答 1

7

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

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

您没有将 SampleEntity 对象加载到应用程序内存中,而只有其属性 A 和 B。Select 也被转换为 sql 查询,以限制从查询返回的行,从而提高性能。

于 2015-04-18T12:35:52.237 回答