Ayende 有一篇博文详细介绍了如何解决 nHibernate 中的“n+1”问题。本质上,问题是这样的:
假设您有两个表,“BlogPosts”和“Comments”,它们之间存在一对多关系(即每个 BlogPost 可以有多个 Comments)。现在,假设您要执行以下嵌套 for 循环:
foreach (BlogPost post in blogposts)
{
foreach (Comment comment in post.Comments)
{
// Do something
}
}
据我了解,默认情况下,SubSonic 生成的类是延迟加载的(我不想完全关闭它,因为它在大多数情况下都很有用,而不是这个)。这意味着每次执行内部循环时(即访问 post.Comments 时),必须向数据库发送单独的查询以检索评论。
因此,如果您有 80 篇博文,则需要 1 次查询来获取博文列表,然后是 80 次查询来获取每篇博文的评论。但是,如果评论是预先加载的,则这将减少为 1 个查询。
目前有什么方法可以解决 SubSonic 中的这个问题吗?