0

使用 EF 6 rc 1 Code first 启用延迟加载并允许生成代理(默认值)。

在尝试访问导航属性时,我发现: - 如果引用的对象已经以某种方式加载到 DbContext 中,则导航属性将被填充 - 如果引用的对象尚未加载,则导航属性将保持为空。不对 SQL Server DB 进行任何查询尝试。

这适用于集合和对象。在所有情况下,我都验证了导航属性被标记为虚拟。

这是预期的行为吗?我已经搜索了我能找到的每一篇文章,但没有找到对此的描述(请提供链接)。如果不是预期的行为,我会做错什么?

谢谢!

编辑:因为我不能发布我拥有的课程,所以我试图将其复制到一个简单的示例中,我会很乐意发布。然而,这个简单的例子按预期工作。我注意到工作示例和非工作示例之间的一个主要区别:我的非工作应用程序生成不是代理的实体。即使代理生成是允许的,并且我正在从新的上下文(而不是创建它们的上下文)中检索这些对象,这也是如此。我不能发布非工作代码,发布工作代码没有任何价值。解释为什么没有生成代理类的理论将受到欢迎!

4

1 回答 1

1

原来没有创建代理包装器的原因是因为某些类的默认构造函数标记为内部。只需将它们更改为受保护的就可以创建代理,然后启用延迟加载。虽然我发现这很模糊,但它记录在这里:http: //msdn.microsoft.com/en-us/library/vstudio/dd468057 (v=vs.100).aspx

于 2013-09-26T22:06:48.873 回答