【问题标题】:EF6 triggers new query on "Include"?EF6 触发“包含”的新查询?
【发布时间】:2017-06-11 23:22:33
【问题描述】:

我正在使用 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”中???

【问题讨论】:

  • 你怎么知道它触发了 5 个额外的查询?
  • 向我们展示如何在您的代码中稍后使用 fullContractors。
  • 经过一段时间检查这个问题后,我意识到这是我的代码中的一个错误,对不起,请删除这篇文章,如果你不给我投票,我完全明白。
  • 我投票决定将此问题作为离题结束,因为这是我正在处理的代码中的错误,而不是 EF6 的错误,抱歉。

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


【解决方案1】:

Include 方法将参数名称作为字符串,建议使用以Expression 作为参数的 Include 的重载版本。 你可以看看扩展方法here的重载版本。

就这样吧

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

或者像这样使用Expression 版本:

var fullContractors = dbContext.Contractors.Include(d => d.Employees);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2018-11-09
    • 2017-02-16
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多