![](/img/trans.png)
[英]Prevent SELECT N+1 issue in Entity Framework query using Joins
[英]Conditionally fetching associated entity avoiding SELECT N+1 problems
假设我有以下域:
public class Company
{
public long Id;
}
public class EmployeeDetailsInCompany
{
public long Id;
public Company Company;
}
public class Employee
{
public long Id;
public List<EmployeeDetailsInCompany> EmployeeDetailsInCompany;
}
public class Position
{
public long Id;
public Employee Employee;
public Company Company;
}
(请注意,这是一个非常简化的版本,使问题更容易理解。)
基本上,我想访问我在Position
实体中拥有的EmployeeDetailsInCompany
的Employee
。 目前,我必须遍历我在Employee
上的列表,并找到Company.Id
与我的Company
实体相匹配的EmployeeDetailsInCompany
。 这是因为Position
仅对某个Company
的某个Employee
有效,所以这就是EmployeeDetailsInCompany
进入的地方。
这里最好的选择是在Position
和EmployeeDetailsInCompany
之间建立关联,但这是不可能的,因为该表上的数据可能会发生变化(例如,公司可能决定清除其所有员工详细信息并再次加载新数据)。
是否可以重写这些关联,这样我就不会陷入 SELECT N+1 问题(现在我必须遍历列表,这种情况正在发生)? 我该如何更改它,以便更轻松地找到我想要的详细信息,而不会有太多麻烦?
我曾考虑在Position
上创建一个EmployeeDetailsInCompany
,该Position
将使用公式进行映射,但这会给我一个只读列,我试图避免 HQL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.