我需要将表中的实体加载到本地缓存中,以便在应用程序窗口的网格控件中显示它们。网格控件从Local
的{{1}}属性获取其数据。实体有一个子实体集合,这些子实体也需要提前加载,因为延迟加载不会以某种方式对DbSet<>
实体起作用。
实体类具有所有映射属性Local
,并且正在使用扩展更改跟踪代理。
这是我发现的:
virtual
这不受支持,实际上编译器会抛出错误,因为没有myContext.Components.Include(x => x.Parts).ToList();
重载接受除字符串以外的任何内容。我不知道为什么每个人都在这里显示带有表达式的代码,如果EF不提供。所以这就是我所做的事情:
Include
不幸的是,这根本没有效果。当我查看零件清单时,它总是空的:
myContext.Components.Include("Parts").ToList();
为var firstEntity = myContext.Components.Local.First();
var count = firstEntity.Parts.Count;
// count should be > 0 but is = 0
方法指定一个不同的,不存在的路径会在运行时抛出异常,因此EF确实会查看该路径字符串并对其进行验证。
访问Include
列表后,一段时间后,部分将出现在列表中,但为时已晚,我不知道它们来自哪里。
那么表达式参数Parts
方法有什么用呢,为什么它根本不起作用呢?还有什么我需要考虑使用急切加载?
实体框架6.1.3(大多数其他内容似乎适用于旧版本)。
以下是课程:
Include