我在 Nhibernate 上做这个查询
FROM Entity e
LEFT JOIN FETCH e.Collection1
LEFT JOIN FETCH e.Collection2
LEFT JOIN FETCH e.Collection3
由于加入,我在 Collection3 上多次重复相同的元素。如何在避免重复项目的同时急切加载所有集合?
我在 Nhibernate 上做这个查询
FROM Entity e
LEFT JOIN FETCH e.Collection1
LEFT JOIN FETCH e.Collection2
LEFT JOIN FETCH e.Collection3
由于加入,我在 Collection3 上多次重复相同的元素。如何在避免重复项目的同时急切加载所有集合?
对于使用一个连接的急切加载,然后.TransformUsing(Transformers.DistinctRootEntity)
就可以了。有关示例,请参阅此博客文章(使用急切加载可能会产生意外结果)。但是,一旦您有两个或多个连接,TransformUsing
就会崩溃。
请参阅Ayende的这篇博Eagerly loading entity associations efficiently with NHibernate
文。
我认为您可以使用"Transformers.DistinctRootEntity"
:
session.QueryOver<Entity>()
.Fetch(entity => entity.SubEntity).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.List();
但它是在 Web 服务器层(不是 SQL Server)上完成的
如果您只想获取某些字段(而不是实体),则可以使用 Distinct 或 Group By。