在当前的MVC4.0项目中,我使用的是Entity Framework 4.1 Database第一个模型。
此结构的一部分包括以下表格
compGroupData 调查数据 SecondaryData
compGroupData和SurveyData未加入数据库
SecondaryData通过外键SurveyData.surveydatakey = SecondaryData.surveydatakey
以一对一的关系加入SurveyData在我的项目中,我将一个ComparisonWithData类定义为:
public class ComparisonWithData
{
public compGroupData compgrp { get; set; }
public SurveyData surveydata { get; set; }
public ComparisonWithData()
{
compgrp = new compGroupData();
surveydata = new SurveyData();
}
}
这为我提供了特定比较组的结果集以及与之匹配的数据。
过去,我通过以下查询检索了数据:
List<ComparisonWithData> comparisonwithdata = ((from compgrp in db.compGroupDatas
where compgrp.grpYear == rptyear && compgrp.CompGroupID == ccompgrp.CompGrpID
join surveydata in db.SurveyDatas on new { compgrp.companyid, SurveyYear = (Int32)compgrp.SurveyYear } equals new { companyid = surveydata.companyid, SurveyYear = surveydata.surveyyear }
select new ComparisonWithData
{
compgrp = compgrp,
surveydata = surveydata,
}
)).ToList();
随着最近的数据更改,我现在还需要引用SecondaryData,但由于记录的数量确实需要加载Eagerly而不是Lazy。 (循环期间的延迟加载会导致数千个数据库调用)
我已经研究过在surveydata上使用“Include”方法,以及将初始查询作为ObjectQuery进行转换并执行Include off that。
第一种方法并不急于加载,第二种方法似乎总是返回一个空对象。
是否有一种方法可以为SurveyData加载辅助数据,或者我是否应该一起查看不同的方法。
我对此的唯一限制是,由于我们对.Net 4.5的限制,我无法进入EF5
非常感谢任何协助。
谢谢。
答案 0 :(得分:0)
您可以尝试首先投射到匿名对象,并在该投影中使用SecondaryData
,实现此结果,然后再次投影到最终结果对象中。 EF上下文提供的自动关系修复应填充surveyData.SecondaryData
对象的导航属性ComparisonWithData
(只要您不在查询中禁用更改跟踪):
var data = (( // ... part up to select unchanged ...
select new // anonymous object
{
compgrp = compgrp,
surveydata = surveydata,
secondarydata = surveydata.SecondaryData
}
)).AsEnumerable();
// part until here is DB query, the rest from here is query in memory
List<ComparisonWithData> comparisonwithdata =
(from d in data
select new ComparisonWithData
{
compgrp = d.compgrp,
surveydata = d.surveydata
}
)).ToList();