使用EF 6 rc 1 代码优先 启用延迟加载并允许代理生成(默认值)。
尝试访问导航属性时,我发现: - 如果引用的对象已经以某种方式加载到DbContext中,则将填充导航属性 - 如果引用的对象尚未加载,则导航属性将保持为null。不会尝试对SQL Server数据库进行查询。
这适用于集合和对象。在所有情况下,我都已验证导航属性是否标记为虚拟。
这是预期的行为吗?我惹恼了我能找到的每一篇文章,但没有找到这方面的描述(请提供链接)。如果不是预期的行为,我可能做错了什么?
谢谢!
编辑: 因为我无法发布我所拥有的课程,所以我试图将其重现为一个简单的例子,我会很自然地发布。然而,这个简单的例子按预期工作。我注意到工作示例和非工作示例之间的一个主要区别:我的非工作应用程序生成非代理的实体。即使允许代理生成,我也会从新的上下文(而不是创建它们的上下文)中检索这些对象。我无法发布非工作代码,并且发布工作代码没有任何价值。解释为什么不生成代理类的理论将受到欢迎!
答案 0 :(得分:1)
原因是没有创建Proxy包装器的原因是因为某些类的默认构造函数标记为internal。只需将它们更改为protected即可创建Proxy,然后启用延迟加载。虽然我发现这很晦涩,但在此处记录:http://msdn.microsoft.com/en-us/library/vstudio/dd468057(v=vs.100).aspx