【发布时间】:2017-04-02 18:31:16
【问题描述】:
以下是使用 Code First Entity Framework (DbContext) 控制数据库表的两个类。
public class Employee
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string EmployeeName { get; set; }
public int DepartmentId { get; set; }
public Department Department { get; set; }
}
--
public class Department
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string DepartmentName { get; set; }
}
如果我检索到Department 的导航属性下方的行为空的员工:
var employees = _context.Employees.ToList();
但是,如果我首先用Departments 填充一个单独的变量,就像这样......
var departments = _context.Departments.ToList();
var employees = _context.Employees.ToList();
...employees 列表中的每个员工都包含部门对象。
我的问题:
填充导航属性的最佳做法是什么?我曾想象 Entity Framework 会默认执行此操作,并且 ToList() 方法将处理延迟加载。
【问题讨论】:
-
如果通过 notification 属性你的意思是 navigation 属性,搜索 EF lazy loading, eager loading 和 显式加载 来了解哪个最适合您(没有“最佳”)。
-
是的,我指的是导航属性。我会纠正这个问题。至于延迟/急切加载:ToList() 方法不应该加载数据吗?
-
它只加载该数据,例如
Employees,但不是像Employee.Department这样的相关数据。见msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx -
谢谢。这很清楚并解决了我的问题,我曾寻找 Include() 方法但缺少 using Microsoft.EntityFrameworkCore;
标签: asp.net-core entity-framework-core