我有以下查询:
ObjectB objectBAlias = null;
ObjectC objectCAlias = null;
var query = session.QueryOver<ObjectA>();
var results = query
.JoinAlias(x => x.listOfBs, () => objectBAlias)
.JoinAlias(x => objectBAlias.ObjectC, () => objectCAlias)
.TransformUsing(new DistinctRootEntityResultTransformer())
.List<ObjectA>();
class ObjectA
{
IList<ObjectB> listOfBs;
}
class ObjectB
{
ObjectA a;
ObjectC c;
}
class ObjectC
{
int x;
}
对象A有一个many-to-many
与 ObjectS 的关系,其中 Object 是连接表。对象A有一个对象列表,对象B有一个对象C的属性。我正在尝试立即加载 ObjectC 但没有成功。
我让所有 ObjectC 立即加载的唯一方法是这样做:
foreach (ObjectA a in results)
{
foreach (var b in a.listOfBs)
{
NHibernateUtil.Initialize(b.c);
}
}
但这似乎不太适合扩展。
我建议 - 不要尝试(多对多的热切加载)。相反 - 使用内置功能:
19.1.5。使用批量抓取 http://nhibernate.info/doc/nh/en/index.html#performance-fetching-batch
NHibernate 可以高效地利用批量抓取,也就是说,如果访问一个代理(或集合),NHibernate 可以加载多个未初始化的代理(或集合)。批量抓取是对惰性选择抓取策略的一种优化。有两种方法可以调整批量抓取:类别和收藏级别。
要获取更多详细信息,请检查以下内容:
- 如何在 NHibernate 中热切加载关联而不重复? https://stackoverflow.com/q/20970680/1679310
- NHibernate Fetch/FetchMany 结果集中重复,如何使用 ToFuture() 修复 https://stackoverflow.com/q/28348830/1679310
获取集合是一项困难的操作。它有很多副作用(正如您所意识到的,当获取更多集合时)。但即使获取一个集合,我们也会加载许多重复的行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)