【发布时间】:2016-03-21 22:38:50
【问题描述】:
即使没有请求,EF7 也会填充包含的导航属性。例如,我有以下实体。
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public int DepartmentId { get; set; }
public Department Department { get; set; }
}
public class Department
{
public int DepartmentId { get; set; }
public string Name { get; set; }
public ICollection<Employee> Employees { get; set; }
}
我的获取查询如下。
ctx.Employees.Where(e => e.Gender == "Male").Include(e => e.Department)
我得到了Employee 对象的Department 属性——这与我为Department 有一个Include 一样预期。我发现Department.Employees 也被填满,但只是部分填满(仅限男性员工)。我没有为Department.Employees 指定Include,但它仍然被填充。这种行为是设计使然吗?有什么办法可以避免在这种情况下获取Department.Employees?
我正在使用版本为 7.0.0-rc1-final 的 EF7 NuGet 包。
【问题讨论】:
-
您是否启用了延迟加载?如果是这样,
Department.Employees可能会在第二个查询中填充。您是否运行 SQL Profiler 来找出发送到数据库的确切查询? -
没有延迟加载发生。 SQL Profiler 仅显示为单个查询:SELECT [e].[EmployeeId], [e].[DepartmentId], [e].[Gender], [e].[Name], [d].[DepartmentId], [ d].[Name] FROM [Employee] AS [e] INNER JOIN [Department] AS [d] ON [e].[DepartmentId] = [d].[DepartmentId] WHERE [e].[Gender] = 'Male '
-
仅供参考,EF7 不支持延迟加载,至少目前是这样
标签: entity-framework entity-framework-core