2017-04-02 38 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進行生產,您仍然依賴這些功能。