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

时间:2012-03-13 17:26:40

标签: c# asp.net entity-framework entity-framework-4

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

到目前为止一切顺利。

重点是我可以使用下面的代码来设置上下文,以便不使用代理甚至使用延迟加载。

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

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

有人可以解释一下这个细节吗?

谢谢!

EDIT1

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

1 个答案:

答案 0 :(得分:11)

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

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

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

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

相关问题