【问题标题】:EF 6.1.3 Lazy loading not workingEF 6.1.3 延迟加载不起作用
【发布时间】:2015-08-19 00:38:12
【问题描述】:

我正在尝试获取单个员工记录,但查看诊断工具显示实体框架执行大量查询加载整个数据库。延迟加载已启用,我正在使用 publicvirtual 关键字,所以我认为这不应该是问题。有什么我遗漏的吗,Employee 记录的导航属性不应该加载。

服务:

return _employeeRepo.GetEmployee(sid);

存储库:

public Employee GetEmployee(string sid)
    {
        Employee employee = Context.Employees.SingleOrDefault(e => e.SID == sid);

        return employee != null ? employee.ToDomain() : null;
    }

员工模型:

public class Employee
{
    ...
    public virtual ICollection<Address> Addresses { get; set; }
    public virtual ICollection<Disability> Disabilities { get; set; }
    ...
    public virtual Bureau Bureau { get; set; }
    public virtual Division Division { get; set; }
    ...

    public Domain.Models.Employee ToDomain()
    {
        return Mapper.Map<Domain.Models.Employee>(this);
    }
}

上下文:

public class SqlContext : DbContext
{
    public SqlContext() : base("SqlContext")
    {
        Database.SetInitializer<SqlContext>(null);
    }

    public virtual DbSet<EfModels.Address> Addresses { get; set; }
    public virtual DbSet<EfModels.Bureau> Bureaus { get; set; }
    public virtual DbSet<EfModels.Disability> Disabilities { get; set; }
    public virtual DbSet<EfModels.Division> Divisions { get; set; }
    public virtual DbSet<EfModels.Employee> Employees { get; set; }
}

【问题讨论】:

  • Employee.ToDomain() 你能展示一下这个扩展方法吗?
  • 我将它添加到员工模型中。我在数据访问层中有一个Employee 模型(如上所示),在Domain 层中有一个Employee 记录。它所做的只是将数据模型映射到域模型。
  • 是的,但是它是否映射了与员工实体相关的表以获取所有信息?
  • 是的,你是对的。我设置了一个断点,当它到达return employee != null ? employee.ToDomain() : null 行时,它开始到达所有这些查询。我应该将其更改为 AutoMapper 以不映射到所有相关表(如果可能的话)?
  • 我不精通自动映射器,无法帮助您。您不需要使用 automapper,它是一个不错的工具,但您应该能够将一种类型映射到另一种类型,而无需使用它。请显示您的映射代码?

标签: asp.net-mvc-5 entity-framework-6 lazy-loading


【解决方案1】:

您的映射工具 (AutoMapper) 是问题所在。

当您调用employee.ToDomain() 时,正在访问您实体的导航属性,导致EF 延迟加载表。

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多