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

Kry*_*zal 6 c# caching entity-framework local dbset

MSDN文档之后,我们可以使用Local属性直接从上下文获取本地/缓存数据,而无需对数据源的其他请求:

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

问题是,代码不起作用(Local为空):

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

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

context.SampleEntities.Load();
// context.SampleEntities.Local.Count is not 0
Run Code Online (Sandbox Code Playgroud)

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

mr1*_*100 7

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

context.SampleEntities.Select(x => new { x.A, x.B })
Run Code Online (Sandbox Code Playgroud)

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