选择n + 1问题

时间:2009-10-05 10:17:31

标签: nhibernate fluent-nhibernate domain-driven-design linq-to-nhibernate select-n-plus-1

Foo有头衔。
酒吧参考Foo。 我有一个酒吧收藏。
我需要一个Foo.Title的集合。

如果我收集了10个小节,我会称db 10次。

  

bars.Select(X => x.Foo.Title)

目前(使用NHibernate Linq并且我不想删除它)检索Bar集合。

var q = from b in Session.Linq<Bar>()
                where ...
                select b;

我读了Ayende所说的about this 另一个相关的question 有点documentation
另一个相关的blog post 也许this可以提供帮助吗? 那么this呢? 也许MultiQuery是我需要的? :/

但我仍然无法在适当的解决方案中'编译'这个。

如何避免选择n + 1?

1 个答案:

答案 0 :(得分:3)

这不起作用:

var q = from b in Session.Linq<Bar>().Expand("Foo.Title")
                where ...
                select b;

但是这种帮助:

var q = from b in Session.Linq<Bar>().Expand("Foo")
                where ...
                select b;

..但是现在要使用存储库的东西也不知道它也在加载foos 任何想法如何使其更明确?

一个想法是将命名更改为FindBarsWithFoos()。

至少它有效。