NHibernate 1.x:不延迟加载多对一 [英] NHibernate 1.x : many-to-one not lazily loaded
问题描述
这是我的映射文件的摘录:
This is extract of my mapping file:
<class name="XXX.A"
table="a"
lazy="false">
<many-to-one name="B"
lazy="proxy"
access="field.camelcase"
cascade="none"
not-null="false"
class="XXX.B"
column="id_b"/>
</class>
但是,当A
通过其ID加载时,我看到左连接"来获取B
.如何预防呢?
But when A
is loaded by its ID, I see "left join" to fetch B
. How to prevent this?
我可以补充一点,我们使用的是ISession.Get(...)
而不是ISession.Load(...)
.
I may add that we use ISession.Get(...)
and not ISession.Load(...)
.
推荐答案
如果您拥有<class name="XXX.B" lazy="false">
,则NHibernate不会为其创建代理类.因此,所有<many-to-one class="XXX.B" lazy="proxy|true" />
都将被忽略,因为NH无法创建代理对象.
if you have <class name="XXX.B" lazy="false">
then NHibernate does not create a proxy class for it. Because of that all <many-to-one class="XXX.B" lazy="proxy|true" />
are ignored because NH can not create proxy objects.
要启用B
的延迟加载,请删除lazy="false"
或设置<class lazy="true">
.如果您因为不想使每个方法都成为虚拟方法而对类禁用Lazy,则还可以实现自己的Proxyclass来处理LazyLoading
To enable LazyLoading of B
remove lazy="false"
or set <class lazy="true">
. If you disabled Lazy for classes because you dont want to make every method virtual you can also implement your own Proxyclass to handle the LazyLoading
这篇关于NHibernate 1.x:不延迟加载多对一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!