【发布时间】:2015-04-18 11:46:46
【问题描述】:
在MSDN documentation 之后,我们可以使用 Local 属性直接从上下文中获取本地/缓存数据,而无需对数据源进行额外请求:
获取表示此集中所有已添加、未更改和已修改实体的本地视图的 ObservableCollection。
(...)
该属性可用于数据绑定,方法是使用数据填充集合,例如使用 Load 扩展方法,然后通过该属性绑定到本地数据。
问题是,该代码不起作用(本地为空):
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 属性的正确方法是什么?
更重要的是,如何将它与部分加载的实体一起使用,就像上面的例子一样?
【问题讨论】:
-
EF 无处存储这些投影查询:您没有一个只包含这些字段的集合。由于这个原因,我认为根本不可能在本地缓存它们。
-
但我认为它应该仍然是实体未完全加载(例如某些字段为空)的同一个集合(SampleEntities)。我的逻辑是,SQL 查询的结果也应该存储在 DbSet
中(其中真正重要的是实体键和实体状态),或者以另一种方式,部分加载的实体根本不会被缓存。那么,您是否指出第二种情况是正确的?
标签: c# entity-framework caching local dbset