Entity framework 4 实体框架延迟加载问题
我正在尝试创建一个表格驱动的多项选择问卷。每个问题中都有一个有孩子选择的问题 当我迭代listOfQuestions时,将执行第一个SQL。通过“包含”选项,我认为当我循环当前问题的选项时,这可以防止二次查找,但事实并非如此 为什么?Entity framework 4 实体框架延迟加载问题,entity-framework-4,Entity Framework 4,我正在尝试创建一个表格驱动的多项选择问卷。每个问题中都有一个有孩子选择的问题 当我迭代listOfQuestions时,将执行第一个SQL。通过“包含”选项,我认为当我循环当前问题的选项时,这可以防止二次查找,但事实并非如此 为什么? var listOfQuestions=(来自journeyEastContext.Questions.Include(“选择”)中的q) OrderByQ.QuestionId 选择新的 { 问题=q, Choices=q.Choices.OrderBy(c=>
var listOfQuestions=(来自journeyEastContext.Questions.Include(“选择”)中的q)
OrderByQ.QuestionId
选择新的
{
问题=q,
Choices=q.Choices.OrderBy(c=>c.Sequence)
});
foreach(问题列表中的var问题组)
{
问题=问题组。问题;
文字段落=新文字段落
{
Text=“”
};
此.QuestionPanel.Controls.Add(段落);
标签问题标签=新标签
{
Text=问题。Text
};
this.QuestionPanel.Controls.Add(QuestionLabel);
//var sortedChoices=来自有问题的选项。选项
//OrderByChoices.Sequence
//选择选择;
foreach(有问题的选择。选择)
{
文字carrageReturn=新文字
{
Text=“
”
};
this.QuestionPanel.Controls.Add(carrageReturn);
RadioButton choiceRadioButton=新RadioButton()
{
ID=String.Format(“{0},{1}”,question.QuestionId,choice.ChoiceId),
Text=choice.Text,
GroupName=question.QuestionId.ToString()
};
this.QuestionPanel.Controls.Add(choiceRadioButton);
}
}
这是因为投影是查询的一部分
select new
{
Question = q,
Choices = q.Choices.OrderBy(c => c.Sequence)
});
有几种方法可以解决这个问题,最简单的方法是
var quesitonsList = (from q in journeyEastContext.Questions.Include("Choices")
orderby q.QuestionId).ToList();
var listOfQuestions = from q in questionsList
Select new
{
Question = q,
Choices = q.Choices.OrderBy(c => c.Sequence)
});
这将告诉EF执行第一个查询(急切地加载Choices属性),然后让您在不触发额外查询的情况下运行迭代
.Include和.Select不混合,因为T-SQL中生成的查询类型不同。基本上,投影使用内部select语句,急切加载的属性使用非规范化和连接来展平记录集
var quesitonsList = (from q in journeyEastContext.Questions.Include("Choices")
orderby q.QuestionId).ToList();
var listOfQuestions = from q in questionsList
Select new
{
Question = q,
Choices = q.Choices.OrderBy(c => c.Sequence)
});