2017-04-02 46 views
0

下面是使用Code First Entity Framework(DbContext)控制数据库表的两个类。惰性加载在EntityFramework核心中不起作用

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; } 
} 

如果我检索与导航属性下方的线员工为null:

var employees = _context.Employees.ToList(); 

但是,如果我第一次填充一个单独的变量与部门,像这样...

 var departments = _context.Departments.ToList(); 

     var employees = _context.Employees.ToList(); 

... 员工列表中的每个员工都包含该部门对象。我的问题: 填充导航属性的最佳做法是什么?我曾设想过,实体框架默认会这样做,并且ToList()方法会处理延迟加载。

+1

如果通过* notification *属性,您的意思是** navigation **属性,搜索EF *延迟加载*,*急切加载*和*显式加载*以了解哪一个适合您(没有“最佳” )。 –

+0

是的,我指的是导航属性。我会纠正这个问题。至于懒/加载:ToList()方法不应该加载数据吗? – Sparked

+1

它仅加载该数据,例如, “雇员”,但不包括** Employee.Department的相关**数据。请参阅https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx –

回答

3

读取docs/roadmap您已经意识到EF Core 1.0/1.1中尚未支持延迟加载。

目前只有.Include或支持急切加载,这两个文件都有详细记录。

您不能假定EF 6的所有功能都可以在EF Core中使用。 EF Core是一个完整重写并且不包含EF6的许多功能。如果你需要这些东西,你应该继续使用EF6。

对于大多数简单/基本的ORM内容而言,EF内核已经足够了,但即使Microsoft建议使用EF6进行生产,您仍然依赖这些功能。