EF 4-无代理延迟加载

本文关键字:延迟加载 代理 EF | 更新日期: 2023-09-27 18:27:44

我读到,当我们需要使用Lazy Loading和Change Tracking时,会使用代理。换句话说,要使用LazyLoading,我必须启用代理。

到目前为止还不错。

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

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

ProxyCreationEnabled属性是否仅与更改跟踪代理相关,或者我缺少什么?

有人能详细解释一下吗?

谢谢!

EDIT1

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

EF 4-无代理延迟加载

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

对于某些类型的遗留实体(尤其是从EntityObject派生的实体),情况并非如此,即使ProxyCreationEnabled设置为false,延迟加载也会起作用。但不要认为这意味着你应该使用EntityObject实体——这会给你带来更多的痛苦。

当您希望确保EF永远不会创建代理时,ProxyCreateEnabled标志通常设置为false,这可能是因为这会给您正在执行的序列化类型带来问题。

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