以下是使用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
的导航属性为null:
var employees = _context.Employees.ToList();
但是,如果我首先使用Departments
填充单独的变量,就像这样......
var departments = _context.Departments.ToList();
var employees = _context.Employees.ToList();
... employees
列表中的每位员工都包含部门对象。
我的问题:
填充导航属性的最佳做法是什么?我曾想过Entity Framework默认会这样做,而ToList()
方法会处理延迟加载。
答案 0 :(得分:3)
阅读docs / roadmap您已经意识到EF Core 1.0 / 1.1尚不支持延迟加载。
目前仅支持.Include
或急切加载,文档中都有详细说明。
您不能假设EF Core中的所有功能都可用于EF Core。 EF Core是完全重写,并不包含EF6的许多功能。如果你需要任何这些东西,你应该继续使用EF6。
EF Core足以满足大多数简单/基本的ORM需求,但即使是微软也建议您在依赖这些功能的情况下使用EF6进行生产。
答案 1 :(得分:1)
我使用UseLazyLoadingProxies解决了EF Core 2.1中的问题:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder
.UseLazyLoadingProxies();
您现在需要手动指定要启用它。