EF6触发“包含”的新查询?

时间:2017-06-11 23:22:34

标签: c# sql entity-framework entity-framework-6

我正在使用EF6,我注意到当我在查询中“包含”子表时,EF会为每一个父行触发一个新查询...是吗?有没有办法避免它并使它只带来主查询的所有信息?

这是我的实体(不是确切的代码):

public class Contractor
{
   public int id { get; set;}
   public IEnumerable<ContractorEmployee> Employees;
}

public class ContractorEmployee
{
   public int id { get; set;}
   public int contractorId { get; set;}
}

这是查询:

var fullContractors = dbContext.Contractors.Include("ContractorEmployee");

因此,如果fullContractors查询检索了5个承包商,我会在SQL中看到5个额外的查询,这些查询会带来每个承包商的雇员。

任何方法都可以避免这种情况并将其全部带入第一个“SELECT”???

1 个答案:

答案 0 :(得分:1)

Expression方法将参数的名称作为字符串,建议使用以var fullContractors = dbContext.Contractors.Include("Employees"); 作为参数的Include的重载版本。 您可以查看扩展方法here的重载版本。

所以这样做

Expression

或使用var fullContractors = dbContext.Contractors.Include(d => d.Employees); 这样的版本:

while (0 == 1) == False: # this statement is true because 0 does not equal 1
     print('hi') # this will create a infinite loop of hi.