如何使用NHibernate标准API实现急切加载,过滤的子集合

时间:2010-05-08 07:37:43

标签: nhibernate

是否可以使用条件api加载一组父对象以及一组过滤的,急切加载的子对象?我正在尝试查询类别列表,同时加载以字母M开头的类别产品。下面的查询给出了我想要的结果,但产品没有急切加载,即NHibernate执行其他查询时我列举了产品系列:

 var categoriesWithProducts = session.CreateCriteria<Category>()
    .SetFetchMode("Products", FetchMode.Eager)
    .CreateCriteria("Products")
    .Add(Expression.Like("Name", "M%"))
    .List<Category>();

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

要记住的是,任何NHibernate查询都只会产生一个SQL语句。

一种解决方案是使用连接,它将返回一个宽结果集。根据每个类别中的产品数量,这可能会降低效率。您的结果列表中也会有重复的类别。

由连接产生的示例宽结果集。

CategoryId,CategoryName,OtherCategoryColumns...,ProductId,ProductName,OtherProductStuff
1,"White stuff",...,1,"Refridgerator",...
1,"White stuff",...,2,"White paint",...
1,"White stuff",...,3,"Milk",...

为了做你想做的事,你可能需要两个查询,因此有两个标准:一个用于获取类别,另一个用于获取产品。如果您的驱动程序支持它,您可以将它们与IMultiCriteria一起批处理。