我有三个表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元素。
有没有更好的方法来加载这些?我很确定我在过去避免了这个问题,但是在我的旧示例代码中没有看到它。
答案 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();