如何在不使用LINQ to SQL和Entity Framework过度调用db的情况下优化此查询?

时间:2015-08-20 16:43:45

标签: c# linq entity-framework linq-to-sql linq-to-entities

我有这个匿名类型,我正在通过存储库调用构建实体框架,但我收到此错误:f下面的代码只从一个数据库中提取,所以我不明白为什么要提出这个。< / p>

The specified LINQ expression contains references to queries that are associated with different contexts.

当我在最后调用上面的ToList()方法时(为了减少对db的调用直到结束),我得到了上面提到的关于多个上下文的错误。它们都来自同一个数据库,只是不同的表,为什么这仍然被抛出,我怎么能修复它才能只调用一次数据库呢?

修改

阅读方法:

// listOfReportIDs is a list of ints
var reports = BusinessLogic.Repository.Read<Report>().Where(r => listOfReportIDs.Contains(r.ReportID));
var huForm = BusinessLogic.Repository.Read<HumanCase>().Where(h => listOfReportIDs.Contains(h.ReportID));
var anForm = BusinessLogic.Repository.Read<AnimalCase>().Where(a => listOfReportIDs.Contains(a.ReportID));

var reportSummaryData = from r in reports
                        from h in huForm.Where(h => h.ReportID == r.ReportID)
                        from a in anForm.Where(a => a.ReportID == r.ReportID)
                        select new
                        {
                            CDC_ReportID = r.CDCReportID,
                            StateReportID = r.StateReportID,
                            r.ReportDate,
                            ReportStatus = r.LookupReportStatus.LookupReportStatusName,
                            r.AuthorID,
                            h.HumanComment,
                            a.AnimalComment
                        };

var reportData = reportSummaryData.ToList();

1 个答案:

答案 0 :(得分:0)

多个上下文是指报告,huForm和anForm。您需要将它们移动到相同的上下文,或使用单独的查询从数据库中获取数据,然后加入然后加入结果。

这些读取中的每一个都为您提供了单独的上下文。您需要抽象数据库连接,然后继承到每个模型。