如何热切地获取所有儿童收藏品?

时间:2012-01-23 14:05:26

标签: c# nhibernate

我需要一种方法,使用NHibernate急切地检索特定类型的所有实体的所有子集合。

我试过了:

var myObjectList = SessionHolder.Current
    .CreateCriteria(typeof(MyObject))
    .SetFetchMode("Clients", FetchMode.Eager)
    .SetFetchMode("Locations", FetchMode.Eager)
    .SetFetchMode("Contracts", FetchMode.Eager)
    .List<MyObject>();

查询应该已经从数据库中返回了所有MyObject实例,并且它们的集合被急切地加载但是它没有按预期工作,而是返回了比预期更多的对象。我认为这与n + 1选择问题有关。

我发现this solution要检索集合,但我目前仅限于使用NHibernate 1.2.1.4000,因此我无法使用期货。

我在发布之前做了很多研究,但找不到任何东西。

感谢您的回复!

1 个答案:

答案 0 :(得分:1)

尝试使用不同的结果转换器:

var myObjectList = 
    SessionHolder.Current
                 .CreateCriteria(typeof(MyObject))
                 .SetFetchMode("Clients", FetchMode.Eager)
                 .SetFetchMode("Locations", FetchMode.Eager)
                 .SetFetchMode("Contracts", FetchMode.Eager)
                 .SetResultTransformer(new DistinctRootEntityResultTransformer())
                 .List<MyObject>();