【发布时间】:2011-03-12 06:57:34
【问题描述】:
我有这个非常基本的表结构:
dbo.tblCategory
dbo.tblQuestion(与 tblCategory 的多对一关系)
dbo.tblAnswer(与 tblQuestion 的多对一关系)
所以基本上,我想要做的是当我加载一个类别时,我还想加载所有问题和所有答案。
现在,我已经能够使用以下代码做到这一点:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include("tblQuestion")
.Include("tblQuestion.tblAnswers")
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
}
但是,我对此并不完全着迷;如果我的模型中的关系名称发生变化;构建项目时我不会出错。理想情况下,我想使用 lambda 表达式;像这样:
public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include(t => t.tblQuestion)
where t.Id == id
select t).FirstOrDefault();
return entities.DetachObjectGraph(dto);
}
}
现在,使用上面的 sn-p;我被困在如何深入到答案表上。知道我可以为这个表达式使用什么 lambda 表达式吗?
【问题讨论】:
-
据我所知,.NET 4.0 中的 Linq to Entities 确实支持延迟加载(默认启用)。那时你不需要为此烦恼。 =)
-
假设我们使用的是 4.0.我们暂时还在使用 3.5 =)
标签: c# .net-3.5 linq-to-entities include eager-loading