我正在使用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”???
答案 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.