假设以下虚构布局
Dealership has many Cars has a Manufacturer
我想写一个查询,上面写着给我一个名字为X的经销商,并获得汽车收藏,但在你这样做的时候使用联盟对付制造商。我认为这需要使用ICriteria。我在想这样的事情......
var dealershipQuery = Session.CreateCriteria< Dealership>("d")
.Add(Restrictions.InsenstiveLike("d.Name", "Foo"))
.CreateAlias("d.Cars", "c")
.SetFetchMode("d.Cars", FetchMode.Select)
.SetFetchMode("c.Manufacturer", FetchMode.Join)
.UniqueResult< Dealership>();
但结果查询看起来并不像我预期的那样。我开始认为某个地方可能需要DetachedCriteria,但我不确定。
思想?
答案 0 :(得分:3)
在同一查询中提取集合几乎不是最佳解决方案。
此链接详细介绍了最佳方法之一:http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx
就个人而言,我首选的解决方案是在集合和实体中使用batch-size
,设置为我的默认页面长度的大小。这样,上面的查询将使用3个便宜的,可单独缓存的查询来完成,而不是昂贵的查询。