首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nhibernate一对多延迟加载无法按预期工作

Nhibernate一对多延迟加载无法按预期工作
EN

Stack Overflow用户
提问于 2010-07-20 06:34:35
回答 1查看 1.4K关注 0票数 2

考虑以下场景:

A类与B类是一对多关系,B类与C类是多对一关系。

代码语言:javascript
复制
class A {
  IList<B> BList {get;set;}
}
class B {
  C CMember{get;set;}
}

class C {
   //null
}

如果我使用如下命令从数据库加载B类

代码语言:javascript
复制
   IList<B> result = query.List<B>();

一切都按预期进行,

但是,如果我这样做:

代码语言:javascript
复制
   DetachedCriteria query = DetachedCriteria.For(typeof(A));
   query.CreateAlias("B", "B", JoinType.InnerJoin);
   IList<A> result = query.List<A>();

然后,NHibernate还将从表C中选择并加载所有C。

映射如下:一个映射...

代码语言:javascript
复制
<bag name="BList " table="B" lazy="true" inverse="false">
    <key column="id" />
    <one-to-many class="B" />
    </bag>

B映射...

代码语言:javascript
复制
<many-to-one class="C" name="CMember" column="idC" lazy="proxy" outer-join="true" />

有什么想法吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-06-15 14:53:09

我已经创建了一个示例应用程序来测试您概述的场景,但我无法重现标准和DetachedCriteria之间的差异,它们为我返回了相同的结果。

加载是否符合延迟属性取决于外部连接属性,当它被设置时,我总是急切地加载C,当我删除外部连接属性时,它通过代理延迟加载C。

因此,一种可能的解决方案是将B映射更改为:

代码语言:javascript
复制
<many-to-one class="C" name="CMember" column="idC" lazy="proxy"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3285633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档