gpt4 book ai didi

c# - Linq to Entities - 使用 Include() 进行预加载

转载 作者:太空狗 更新时间:2023-10-29 17:51:18 27 4
gpt4 key购买 nike

我有这个非常基本的表结构:

dbo.tbl类别
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);
}
}

现在,使用上面的代码片段;我坚持如何深入到 Answers 表。关于我可以将什么用于此 lambda 表达式的任何想法?

最佳答案

好的;在 here 的帮助下,我能够让它工作.

基本上,我需要这样做:

public tblCategory Retrieve(int id)
{
using (var entities = Context)
{
var dto =
(from t in entities.tblCategory.Include(t => t.tblQuestion)
.Include(t => t.tblQuestion.First().tblAnswer)
where t.Id == id
select t).FirstOrDefault();

return entities.DetachObjectGraph(dto);
}
}

从上面的链接中,我只能取消对问题集合中个别项目的 tblAnswers 的引用。在这里,我选择在集合的第一项上取消引用 tblAnswers。实际上,此 lambda 表达式仅用于生成属性路径“tblQuestion.tblAnswers”,它将预先加载所有问题的答案。

因此,尽管看起来我只是在提取第一个问题的答案,但实际上我在提取所有问题的所有答案。

关于c# - Linq to Entities - 使用 Include() 进行预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com