C# 使用联接时避免子集合上的重复项
我在调查NhibernateC# 使用联接时避免子集合上的重复项,c#,nhibernate,C#,Nhibernate,我在调查Nhibernate FROM Entity e LEFT JOIN FETCH e.Collection1 LEFT JOIN FETCH e.Collection2 LEFT JOIN FETCH e.Collection3 由于连接,我在Collection3上多次重复使用相同的元素。如何在避免重复项目的同时快速加载所有集合?我认为您可以使用“Transformers.distinctroventy”: session.QueryOver() .F
FROM Entity e
LEFT JOIN FETCH e.Collection1
LEFT JOIN FETCH e.Collection2
LEFT JOIN FETCH e.Collection3
由于连接,我在Collection3上多次重复使用相同的元素。如何在避免重复项目的同时快速加载所有集合?我认为您可以使用“Transformers.distinctroventy”
:
session.QueryOver()
.Fetch(entity=>entity.SubEntity).Eager
.变压器使用(变压器.距离)
.List();
但它是在web服务器层完成的(不是SQL server)
如果只想获取一些字段(而不是实体),可以使用Distinct或Group By。使用一个join进行即时加载,然后
。TransformUsing(Transformers.distinctropenty)
就可以了。请参见此示例(使用即时加载可能会产生意外结果)。但是,一旦有两个或多个联接,则TransformUsing
就会发生故障
从Ayende tilted中可以看到这一点,他们急切地用NHibernate高效地加载实体关联
session.QueryOver<Entity>()
.Fetch(entity => entity.SubEntity).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.List();