考虑以下场景:
A类与B类是一对多关系,B类与C类是多对一关系。
class A {
IList<B> BList {get;set;}
}
class B {
C CMember{get;set;}
}
class C {
//null
}如果我使用如下命令从数据库加载B类
IList<B> result = query.List<B>();一切都按预期进行,
但是,如果我这样做:
DetachedCriteria query = DetachedCriteria.For(typeof(A));
query.CreateAlias("B", "B", JoinType.InnerJoin);
IList<A> result = query.List<A>();然后,NHibernate还将从表C中选择并加载所有C。
映射如下:一个映射...
<bag name="BList " table="B" lazy="true" inverse="false">
<key column="id" />
<one-to-many class="B" />
</bag>B映射...
<many-to-one class="C" name="CMember" column="idC" lazy="proxy" outer-join="true" />有什么想法吗?谢谢。
发布于 2011-06-15 14:53:09
我已经创建了一个示例应用程序来测试您概述的场景,但我无法重现标准和DetachedCriteria之间的差异,它们为我返回了相同的结果。
加载是否符合延迟属性取决于外部连接属性,当它被设置时,我总是急切地加载C,当我删除外部连接属性时,它通过代理延迟加载C。
因此,一种可能的解决方案是将B映射更改为:
<many-to-one class="C" name="CMember" column="idC" lazy="proxy"/>https://stackoverflow.com/questions/3285633
复制相似问题