gpt4 book ai didi

c# - 在 Entity Framework 中从数据库加载 N 条记录

转载 作者:行者123 更新时间:2023-11-30 21:48:25 25 4
gpt4 key购买 nike

我只需要从列表中加载 5 个元素,而不需要加载所有列表。我有这两个实体:

public class Company
{
public int ID { get; set; }
public String Name{ get; set; }
public List<Employee> EmployeeList{ get; set; }
}

和:

public class Employee
{
public int ID { get; set; }
public String Name{ get; set; }
}

我只需要为名为“CompanyName”的公司加载员工的最后 5 条记录。

我尝试使用:

Company companySearch =systemDB.Companies
.Include("EmployeeList").Take(5)
.Where(d => d.Name.Equals("CompanyName"))
.SingleOrDefault();

但是这段代码加载了所有列表,之后只返回最后 5 条记录。我需要更快的查询。

PS: 是code first EF

最佳答案

用于加载 EmployeeList 的选择性 N 条记录您将必须有一些标准,您的集合导航属性的成员将根据这些标准进行过滤。我将该标准作为 ID 的值Employee的属性(property)实体。以下是所有需要的步骤以及代码片段,这些代码片段将执行 EmployeeList 的延迟加载。收藏 Company实体

  1. 在继承的 dbContext 类的构造函数中启用延迟加载。我相信 systemDB 是继承自 DbContext 的类的对象

    public SystemDB()
    {
    this.Configuration.LazyLoadingEnabled = true;
    }
  2. 删除 include 子句以避免预先加载:

    Company companySearch =systemDB.Companies
    .Where(d => d.Name.Equals("CompanyName"))
    .SingleOrDefault();

执行完这行代码后,如果检查EmployeeList companySearch的属性(property)object 它将显示为 Null在快速观察窗口中。

  1. 执行 EmployeeList 的延迟加载使用下面提到的调用的属性。为过滤记录设置明确的标准。我设置了过滤条件来限制 ID 介于 1 和 5 之间的员工,这两个边界都包含在内。

    db.Entry<Company>(companySearch).Collection(s => s.EmployeeList).Query().Where(p => p.ID >= 1 && p.ID <= 5).Load();

关于c# - 在 Entity Framework 中从数据库加载 N 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com