SubSonic阅读加入了桌子的费用

时间:2010-07-11 14:13:16

标签: .net subsonic

假设我有以下架构

table A:
ID int primary key
value varchar(255) not null

table B:
ID int primary key
AID foreign key refences A (ID)
name varchar(40) not null

现在当我执行以下亚音速linq

var items = 
from a in A.All() 
where any-condition select a;
一切都很好。

杀手是我做以下事情的时候

for(var item in items)
{
   for(var nestedItem in item.B) // troubling!
   {
     DoSomething(nestedItem)
   }
}

我对内部工作方式不是很熟悉,但我很确定它会额外访问数据库以获取连接的表行。

请告诉我如何避免这种昂贵的旅行?

1 个答案:

答案 0 :(得分:2)

这是ORM的一个经典问题 - SELECT N + 1.你遇到的是Lazy vs. Eager加载,在这种情况下你需要做某种外连接(使用查询工具)或者将B拉入列表。