1

我在 Nhibernate 上做这个查询

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

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

4

2 回答 2

0

对于使用一个连接的急切加载,然后.TransformUsing(Transformers.DistinctRootEntity)就可以了。有关示例,请参阅此博客文章(使用急切加载可能会产生意外结果)。但是,一旦您有两个或多个连接,TransformUsing就会崩溃。

请参阅Ayende的这篇Eagerly loading entity associations efficiently with NHibernate文。

于 2012-04-08T08:11:02.957 回答
0

我认为您可以使用"Transformers.DistinctRootEntity"

session.QueryOver<Entity>()
   .Fetch(entity => entity.SubEntity).Eager
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();

但它是在 Web 服务器层(不是 SQL Server)上完成的

如果您只想获取某些字段(而不是实体),则可以使用 Distinct 或 Group By。

于 2012-04-05T14:39:04.967 回答