1

假设以下虚构布局

经销权
  有很多车
     有一个制造商

我想写一个查询,告诉我给我一个名称为 X 的经销权,并获得 Cars 集合,但是当你这样做时使用对制造商的连接。我认为这需要使用 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,但我不确定。

想法?

4

1 回答 1

3

在同一个查询中获取集合几乎从来都不是最好的解决方案。

此链接中详细介绍了最佳方法之一:http: //ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx

就个人而言,我首选的解决方案是batch-size在集合和实体中使用,设置为我的默认页面长度的大小。这样,您上面的查询将使用 3 个便宜的、可单独缓存的查询来完成,而不是一个昂贵的查询。

于 2010-06-11T01:02:43.307 回答