Entity framework 4 实体框架延迟加载问题

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=>

我正在尝试创建一个表格驱动的多项选择问卷。每个问题中都有一个有孩子选择的问题

当我迭代listOfQuestions时,将执行第一个SQL。通过“包含”选项,我认为当我循环当前问题的选项时,这可以防止二次查找,但事实并非如此

为什么?

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)
                                   });