是否可以使用条件api加载一组父对象以及一组过滤的,急切加载的子对象?我正在尝试查询类别列表,同时加载以字母M开头的类别产品。下面的查询给出了我想要的结果,但产品没有急切加载,即NHibernate执行其他查询时我列举了产品系列:
var categoriesWithProducts = session.CreateCriteria<Category>()
.SetFetchMode("Products", FetchMode.Eager)
.CreateCriteria("Products")
.Add(Expression.Like("Name", "M%"))
.List<Category>();
我在这里缺少什么?
答案 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一起批处理。