l15*_*15a 8 c# linq entity-framework
我使用Entity Framework来创建我的数据库模式并生成我的代码.我有一个名为Employee的表,它在DaysOff表中有子记录.DaysOff有一个Employee的外键,我的模型中有一个1到*的关联.我在Employee表上运行了一个LINQ查询,并期望我的Domain.Employee对象将填充DaysOff,但DaysOff为null.当我在对象中向下钻取时,我看到"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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:下面接受的答案和评论(所有上调)的组合帮助我解决了这个问题(耶!):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
我认为儿童记录会被填充是错误的吗?
我猜它可能DaysOff是懒散地填充,但到那时EmployeeEntities已经被处理掉了.你可能想尝试类似的东西:
using (var db = new EmployeeEntities().Include("Employee.DaysOff"))
Run Code Online (Sandbox Code Playgroud)
另请注意,using语句中的代码更简单,如下所示:
return db.Employees.FirstOrDefault(e => e.EmployeeId == employeeId);
Run Code Online (Sandbox Code Playgroud)
编辑
上面的代码不正确.Include必须用于ObjectQuery<T>或IQueryable<T>不能应用于ObjectContext/ DbContext.正确用法是:
using (var db = new EmployeeEntities())
{
return db.Employees.Include("DaysOff")
.FirstOrDefault(e => e.EmployeeId == employeeId);
}
Run Code Online (Sandbox Code Playgroud)