EF 4 – 没有代理的延迟加载

我读过在需要使用延迟加载和更改跟踪时使用代理。 换句话说,要使用延迟加载,我必须启用代理。

到现在为止还挺好。

关键是我可以使用下面的代码设置上下文不使用代理甚至使用延迟加载。

ctx = new SchoolEntities(); ctx.ContextOptions.ProxyCreationEnabled = false; ctx.ContextOptions.LazyLoadingEnabled = true; 

ProxyCreationEnabled属性是仅与更改跟踪代理相关还是我遗漏了某些内容?

有人可以用一些细节解释一下吗?

谢谢!

EDIT1

我没有使用POCO / DbContext。 我使用带有ObjectContext的常规edmx EF模型。 我知道POCO实体的代理对于更改跟踪和延迟加载的重要性。 为什么在常规EDMX模型中使用Proxies?

使用具有Entity Framework内置function的POCO实体时,必须启用代理创建才能使用延迟加载。 因此,对于POCO实体,如果ProxyCreationEnabled为false,则即使LazyLoadingEnabled设置为true,也不会发生延迟加载。

对于某些类型的遗留实体(特别是那些派生自EntityObject的实体),情况并非如此,即使ProxyCreationEnabled设置为false,延迟加载也会起作用。 但是不要认为你应该使用EntityObject实体 – 这会让你更痛苦。

当您希望确保EF永远不会创建代理时,ProxyCreationEnabled标志通常设置为false,这可能是因为这会导致您正在进行的序列化类型出现问题。

一旦确定代理正常,LazyLoadingEnabled标志通常用于控制是否在上下文范围内发生延迟加载。 因此,例如,您可能希望使用代理进行更改跟踪,但关闭延迟加载。