【问题标题】:Lazy Loading not working in EntityFramework Core延迟加载在 EntityFramework Core 中不起作用
【发布时间】: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


【解决方案1】:

阅读docs/roadmap,您会意识到 EF Core 1.0/1.1 尚不支持延迟加载。

目前仅支持.Include 或急切加载,两者都在文档中有详细记录。

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

EF Core 对于大多数简单/基本的 ORM 内容来说已经足够好了,但即使是 Microsoft 也建议在您依赖这些功能的生产环境中使用 EF6。

【讨论】:

    【解决方案2】:

    我在 EF Core 2.1 中使用 UseLazyLoadingProxies 解决了我的问题:

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder
            .UseLazyLoadingProxies();
    

    您现在需要手动指定要启用它。

    【讨论】:

    • 为了能够包含它,它是一个单独的 Nuget 包,您必须将其下拉:Microsoft.EntityFrameworkCore.Proxies
    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2023-03-31
    相关资源
    最近更新 更多