EF 6.1.3 延迟加载不起作用
EF 6.1.3 Lazy loading not working
我正在尝试获取单个员工记录,但查看它显示的诊断工具 Entity Framework 正在执行加载整个数据库的大量查询。延迟加载已启用,我正在使用 public
和 virtual
关键字,所以我认为这不是问题所在。有什么我遗漏的吗,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; }
}
问题出在您的制图工具 (AutoMapper) 上。
当您调用 employee.ToDomain() 时,正在访问您实体的导航属性,导致 EF 延迟加载表。
我正在尝试获取单个员工记录,但查看它显示的诊断工具 Entity Framework 正在执行加载整个数据库的大量查询。延迟加载已启用,我正在使用 public
和 virtual
关键字,所以我认为这不是问题所在。有什么我遗漏的吗,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; }
}
问题出在您的制图工具 (AutoMapper) 上。
当您调用 employee.ToDomain() 时,正在访问您实体的导航属性,导致 EF 延迟加载表。