我在我的网页有几个下拉菜单。这些链接并具有类似的双向链接类结构。nhibernate3查询 - 收藏与收藏
换句话说:类Alpha有一个类Beta的列表,而类又有一个类Charlie的列表。每个Beta类也有它自己的Alpha列表(它所属的列表),每个类Charlie都有它自己的Beta列表。
我使用的NHibernate 3与流利的nhibernate和automappings。
现在。如果我只是运行一个
session.CreateCriteria<Alpha>().SetMaxResults(1000).List<Alpha>();
我收到N + 1的问题,当我循环的集合。
我看到它的方式如下SQL的应该是所有与查询到数据库
select top 1000 * from Alpha
select top 1000 * from Beta
select top 1000 * from Charlie
select * from Alpha2Beta
select * from Beta2Charlie
但是我怎么写这个工作查询?
您在Alpha和Beta,Beta和Charlie之间有双向关系 - 您如何期望只查询这三个表?必须有链接表来实现这个... – 2012-01-05 10:37:43
哦,我很傻,你绝对是对的!我将更新文本 – Ivar 2012-01-05 11:17:48
听起来像您正在使用无状态会话。 StatelessSession没有缓存 - 并且无状态会话中的对象不能延迟加载。这意味着您将无法预取组件并执行组合查询。如果是这种情况 - 您需要在查询中使用.Fetch()以便从Alpha2Beta和Beta2Charlie中加载子对象。你仍然会有一些重复 - 但并不像N + 1那么糟糕。 – Origin 2012-01-05 15:54:02