我想知道延迟加载在我使用虚拟时是否正常工作,或者我必须将其显式设置为true,如下所示:
DbContext.ContextOptions.LazyLoadingEnabled = true;
答案 0 :(得分:3)
如果要启用延迟加载并在发生更改时让实体框架跟踪更改,则必须满足其他要求。您可以在link:
中找到这些要求要创建其中任何一个代理:
- 自定义数据类必须声明
public
访问权限。自定义数据类不得
sealed
(在Visual Basic中为NotInheritable
)自定义数据类不得
abstract
(在Visual Basic中为MustInherit
)。自定义数据类必须
public
或protected
构造函数,其中没有参数。如果您想要protected
,请使用不带参数的Create
构造函数 用于为POCO实体创建代理的方法。调用Create
方法不保证创建 代理:POCO类必须遵循其他要求 本主题中描述的。类无法实现
IEntityWithChangeTracker
或IEntityWithRelationships
接口,因为代理类实现了这些接口。
ProxyCreationEnabled
选项必须设置为true
。对于延迟加载代理:
- 每个导航属性必须声明为
public
,virtual
(在Visual Basic中为Overridable
),而不是sealed
(NotOverridable
in Visual Basic)获取访问器。自定义数据类中定义的导航属性必须具有相应的导航属性 概念模型。对于更改跟踪代理:
- 映射到数据模型中实体类型的属性的每个属性必须
non-sealed
(NotOverridable
在Visual中 基本),public
和virtual
(在Visual Basic中为Overridable
)获取 并设置访问者。- 一个导航属性,代表"很多"关系结束必须返回实现
ICollection
的类型,其中T
是关系另一端的对象类型。- 如果您希望与对象一起创建代理类型,则在创建新对象时,{strong>使用
DBSet<T>
上的Create方法,而不是{{ 1}} operator。
答案 1 :(得分:0)
Entity Framework Loading Related Entities
延迟加载是在第一次访问引用实体/实体的属性时从数据库自动加载实体或实体集合的过程。 使用POCO实体类型时,通过创建派生代理类型的实例,然后覆盖虚拟属性以添加加载钩子来实现延迟加载。 [...]
要回答您的问题,只要它已启用,是的,虚拟导航属性将被延迟加载。
答案 2 :(得分:0)
默认
DbContext.ContextOptions.LazyLoadingEnabled
设置为 true ,因此,如果您不忘记虚拟,并且您没有将类标记为已密封,则可以正常工作。