获取查询结果副本
问题描述:
我有三个表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();
答
你可以使用一个变压器来得到不同的结果:
var list = session.Query<A>()
.Fetch(a=> a.Bs)
.Fetch(a=> a.Cs)
.SetResultTransformer(Transformers.DistinctRootEntity)
这是NH3.2语法,2.1则需要使用新的DistinctRootEntityTransformer()(我认为)作为参数传递给SetResultTransformer代替。
也做到了,谢谢你。我不熟悉ToFuture,但我的儿子会! –
未来将批量选择,每个将初始化一个集合。会话缓存会将结果关联在一起,并导致两个集合初始化 – Firo