在查询中获得重复的结果

时间:2012-10-24 06:10:03

标签: nhibernate fluent-nhibernate

我有三个表A,B和C. A是一个父表,在B和C中有多个子记录。

当我查询A时,我收到了太多记录,好像FNH正在做笛卡尔积。

我的查询格式为:

var list = session.Query<A>()
  .Fetch(a=> a.Bs)
  .Fetch(a=> a.Cs)

其中Bs是A的IList属性,而Cs是A的IList属性。

我应该只获得与A相关的B数量,并且只有与A相关的C数量相同。相反,我得到每个B的BxC元素。

有没有更好的方法来加载这些?我很确定我在过去避免了这个问题,但是在我的旧示例代码中没有看到它。

2 个答案:

答案 0 :(得分:2)

您可以使用Transformer获得截然不同的结果:

var list = session.Query<A>()
  .Fetch(a=> a.Bs)
  .Fetch(a=> a.Cs)
  .SetResultTransformer( Transformers.DistinctRootEntity )

这是NH3.2语法,对于2.1你需要使用新的DistinctRootEntityTransformer()(我认为)作为SetResultTransformer的参数。

答案 1 :(得分:2)

我不确定这是NH错误还是映射问题,但查询可以优化为

session.Query<A>()
    .Fetch(a=> a.Bs)
    .ToFuture();

var results = session.Query<A>()
    .Fetch(a=> a.Cs)
    .ToFuture()
    .ToList();