實體框架7包含()未按預期工作

entity-framework entity-framework-core

即使沒有請求,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屬性 - 這與我有一個Include for Department 。我發現Department.Employees也被填補但部分(僅限男性員工)。我沒有為Department.Employees指定一個Include ,但它仍然在填充。這種行為是設計的嗎?有沒有辦法避免在這種情況下獲取Department.Employees

我正在使用版本7.0.0-rc1-final的EF7 NuGet包。

熱門答案

這是EF的正常行為。執行查詢時,您加載的所有實體都將附加到您的上下文。因此,EF不會執行另一個查詢並部分加載Department.Employees ,這些員工在執行查詢時已加載。總之,當您諮詢Department.Employees導航屬性時,EF將使用您按照Gender過濾查詢的員工填充該屬性。

更新:

正如我在上面的評論中指出的那樣,EF7不支持延遲加載。如果要避免Json.NET序列化該屬性,可以在該屬性上使用屬性JsonIgnore ,也可以創建自定義類(DTO)來投影查詢並僅填充所需的屬性。如果您決定使用最後一個解決方案,我還建議您查看Automapper



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因