使用join时,避免在子集合上重复使用项目

时间:2012-04-05 13:44:52

标签: c# nhibernate

我在Nhibernate上做这个查询

FROM             Entity e
LEFT JOIN FETCH  e.Collection1
LEFT JOIN FETCH  e.Collection2
LEFT JOIN FETCH  e.Collection3 

由于连接,我在Collection3上重复了多次相同的元素。如何在避免重复项目的同时加载所有集合?

2 个答案:

答案 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}}。