Ayende有一个blog post详细说明如何对付nHibernate中的“n + 1”问题。实质上,问题是这样的:如何避免SubSonic的n + 1问题?
假设您有两个表格“BlogPosts”和“Comments”,它们之间有一对多的关系(即每个BlogPost可以有多个注释)。现在,让我们说你要执行下面的嵌套的循环:
foreach (BlogPost post in blogposts)
{
foreach (Comment comment in post.Comments)
{
// Do something
}
}
从我个人理解,这亚音速默认生成的lazyload类(我不想彻底关闭这个功能,因为它是有用大多数情况下,只是不是这个)。这意味着每次执行内部循环(即访问post.Comments时),都必须将单独的查询发送到数据库以检索评论。
因此,如果您有80条博客文章,即1条查询获取博客文章列表,然后80条查询获得每条评论的评论。但是,如果注释被加载,这将被减少为1个查询。
在SubSonic中有没有办法解决这个问题?
嗯。那真不幸。那么如果你有一个GridView绑定到一个BlogPostCollection并且你想显示那个BlogPost的注释数量呢? – 2009-01-12 18:20:09