【问题标题】:NHibernate Eager LoadingNHibernate 急切加载
【发布时间】:2017-10-19 03:10:27
【问题描述】:
在实体框架中,当我禁用延迟加载和代理时,除非我明确包含关联,否则永远不会加载关联。
如何在 NHibernate 中获得相同的行为?
我尝试在映射配置文件关联加载中设置lazy = false,这与实体框架的行为完全相反
<set name="associations" table="parentChild" lazy="false">
......
</set>
有没有办法获得实体框架之类的行为
【问题讨论】:
标签:
.net
entity-framework
nhibernate
【解决方案1】:
您似乎正在寻找lazy=no-proxy 选项,它给出了最接近您想要达到的结果。
lazy(可选 - 默认为代理):默认情况下,单点
关联被代理。 lazy="no-proxy" 指定属性
应该在第一次访问实例变量时延迟获取。
它需要构建时字节码检测。懒惰=“假”
指定将始终急切地获取关联。
(来自 Hibernate 文档,但仍适用于 NHibernate)
【解决方案2】:
如果您的目标是避免这些属性被代理,请参阅Hazzik answer。这会导致持有实体被代理。
如果您的目标是能够在不加载它们的情况下访问这些属性,保持(错误地根据 db 中的实际数据)null(集合为 null 或为空),NHibernate 不为此提供功能,除了不映射这些属性(当然也不允许预先加载)。
如果是后者,为什么需要这个?也许你应该问另一个问题,是什么导致你想要那个以及如何解决它(也许没有那个)。