代码之家  ›  专栏  ›  技术社区  ›  Arnis Lapsa

选择n+1问题

  •  6
  • Arnis Lapsa  · 技术社区  · 15 年前

    福有头衔。
    酒吧参考foo. 我有一个带酒吧的收藏品。
    我需要一个带有foo.title的收藏。

    如果我有10个酒吧,我会打10次电话给DB。

    bars.select(x=>x.foo.title)

    目前(使用nhibernate-linq,我不想删除它)检索酒吧收藏。

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

    我读了艾伦德的话 about this .
    另一个相关 question .
    一点点 documentation .
    还有另一个相关的 blog post .
    也许吧 this 能帮忙吗?
    怎么样 this ?
    也许吧 MultiQuery 我需要什么?:

    但我仍然不能用适当的解决方案“编译”这个。

    如何避免选择n+1?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Arnis Lapsa    15 年前

    这不起作用:

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

    但这种A有助于:

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

    …但是现在要使用存储库的东西不知道它也在加载foos。
    有什么办法让它更明确些吗?

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

    至少它起作用了。