我在Nhibernate上做这个查询
FROM Entity e
LEFT JOIN FETCH e.Collection1
LEFT JOIN FETCH e.Collection2
LEFT JOIN FETCH e.Collection3
由于连接,我在Collection3上重复了多次相同的元素。如何在避免重复项目的同时加载所有集合?
答案 0 :(得分:0)
我认为你可以使用"Transformers.DistinctRootEntity"
:
session.QueryOver<Entity>()
.Fetch(entity => entity.SubEntity).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.List();
但它是在Web服务器层(非SQL Server)上完成的
如果您只想获得某些字段(不是实体),可以使用Distinct或Group By。
答案 1 :(得分:0)
对于使用一个连接的急切加载,.TransformUsing(Transformers.DistinctRootEntity)
将正常工作。有关示例,请参阅此blog post(使用预先加载可能会产生意外结果)。但是,只要您有两个或更多联接,TransformUsing
就会崩溃。
请参阅Ayende倾斜Eagerly loading entity associations efficiently with NHibernate
的{{3}}。