获取查询结果副本

问题描述:

我有三个表A,B和C. A是B中多发子记录和C.获取查询结果副本

父表当我查询到AI我得到了太多的记录,仿佛FNH正在做笛卡尔产品。

我查询的形式为:

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

其中基站为一的IList的财产,和C是A的IList的财产

我应该只得到尽可能多的烧烤是涉及到A,并且只有很多C与A相关。相反,我得到每个BxC元素。

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

我不知道这是否是NH错误或地图问题,但查询可以优化到

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

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

也做到了,谢谢你。我不熟悉ToFuture,但我的儿子会! –

+0

未来将批量选择,每个将初始化一个集合。会话缓存会将结果关联在一起,并导致两个集合初始化 – Firo

你可以使用一个变压器来得到不同的结果:

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

这是NH3.2语法,2.1则需要使用新的DistinctRootEntityTransformer()(我认为)作为参数传递给SetResultTransformer代替。