gpt4 book ai didi

c# - LINQ 子记录为空

转载 作者:太空狗 更新时间:2023-10-29 18:18:51 25 4
gpt4 key购买 nike

我使用 Entity Framework 来创建我的数据库架构并生成我的代码。我有一个名为 Employee 的表,它在 DaysOff 表中有子记录。 DaysOff 有一个指向 Employee 的外键,并且在我的模型中有一个 1 到 * 的关联。我在 Employee 表上运行了一个 LINQ 查询,并期望我的 Domain.Employee 对象将填充有 DaysOff 但 DaysOff 为空。当我在对象中向下钻取时,我看到“employee.DaysOff.Count 引发了 System.ObjectDisposedException 类型的异常”。我认为子记录将被填充是错误的吗?我该怎么做?这是我调用来获取我的员工的方法:

public static Domain.Employee SelectEmployee(int employeeId)
{
using (var db = new EmployeeEntities())
{

Domain.Employee emp = (from e in db.Employees
where e.EmployeeId == employeeId
select e
).FirstOrDefault();

return emp;
}
}

编辑:下面接受的答案和评论(全部投票)的组合帮助我解决了这个问题(耶!):

public static Domain.Employee SelectEmployee(int employeeId)
{
using (var db = new EmployeeEntities())
{

Domain.Employee emp = (from e in db.Employees.Include("DaysOff")
where e.EmployeeId == employeeId
select e).FirstOrDefault();

return emp;
}
}

最佳答案

Am I wrong to think that the child records will be populated?

猜测可能是 DaysOff懒惰地填充,但到那时EmployeeEntities已被处置。您可能想尝试类似的方法:

using (var db = new EmployeeEntities().Include("Employee.DaysOff"))

另请注意,您在 using 中的代码语句会更简单地写成:

return db.Employees.FirstOrDefault(e => e.EmployeeId == employeeId);

编辑

上面的代码不正确。 Include必须在 ObjectQuery<T> 上使用或 IQueryable<T>并且不能应用于 ObjectContext/DbContext .正确的用法是:

using (var db = new EmployeeEntities())
{
return db.Employees.Include("DaysOff")
.FirstOrDefault(e => e.EmployeeId == employeeId);
}

关于c# - LINQ 子记录为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11582525/

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