优化多个LINQ to Entity Framework查询

时间:2010-10-25 08:17:32

标签: entity-framework optimization linq-to-entities

我有2个实体框架实体集,具有多对多关系(受3个DB表的影响)。为了举例说明,我假设我有一个工人实体和一个公司实体,每个工人可以在多个公司工作,每个公司可以有很多工人。

我想为每个工人检索他/她工作的所有公司。直截了当的方法是为每个工作者创建一个查询,该查询将使用关联表和公司表之间的连接来获取公司,但这会导致每个工作人员往返数据库。

我确信这可以通过更优化的方式完成。任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您的加入表没有任何额外信息(只是工人和公司的ID),您的模型中应该只有两个实体:WorkerCompany。如果EF 4实体图表是默认加载的,那么除非您通过执行(context.ContextOptions.LazyLoadingEnabled = true;)启用LazyLoading,否则无论何时查询工作人员,都会获得公司列表:

var workers = context.Workers.ToList();
// Companies already loaded - do something with them
var companiesForWorker0 = workers[0].Companies;  // Don't forget to check 
...                                              // for null in real code

您还可以直接告诉EF在查询工作人员时急切加载公司(如果启用了LazyLoading则需要这样做):

var workers = context.Workers.Include("Companies").ToList();

答案 1 :(得分:0)

这是我在Linq2SQL中所做的,可能适合你。

  1. 查询#1。
  2. 将所有工人'ID'收集在列表中。
  3. 使用此列表传递给辅助查询(换句话说,where list.Contains(item))。
  4. 现在它只需要2个查询。

    如果需要,您可以将它们组合成一个查询,但需要更多努力。