假设我有以下架构
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)
}
}
我对内部工作方式不是很熟悉,但我很确定它会额外访问数据库以获取连接的表行。
请告诉我如何避免这种昂贵的旅行?
答案 0 :(得分:2)
这是ORM的一个经典问题 - SELECT N + 1.你遇到的是Lazy vs. Eager加载,在这种情况下你需要做某种外连接(使用查询工具)或者将B拉入列表。