实体框架:嵌套相同的上下文表示连接已经打开
本文关键字:连接 表示 上下文 框架 嵌套 实体 | 更新日期: 2023-09-27 18:12:29
我有一段代码,需要根据来自DB的数据返回一个带分隔符的字符串,除了提到注释的行外,所有代码都运行良好。我知道单个DbContext不能在单个实例时间内用于多个查询。
private string FetchNewEmployees(DateTime addedAfter)
{
StringBuilder newEmployees = new StringBuilder();
using (MyDbContext dbContext = new MyDbContext())
{
var employees = dbContext.Student.Where(p => p.lastupdatedon > addedAfter);
foreach (var employee in employees)
{
newEmployees.Append(string.Format("{0}|{1}|{2}|{3}|{4}{5}",
employee.Name,
employee.DOB,
employee.department.DepartmentName, // This line throws error saying connection already open | commenting this makes it work like charm
employee.EMailAddress,
employee.SchoolName,
System.Environment.NewLine));
}
}
return newEmployees.ToString();
}
问题id"department"是另一个表,因此"employee"有一个外键…如果我不清楚的话,请告诉我。
现在任何帮助对我来说都像是赢得了两个世界。
第一个解决方法:
var employees = dbContext.Student.Where(p => p.lastupdatedon > addedAfter).ToList();
...
这将关闭与student表的连接,但将生成额外的查询,以延迟加载部门。
另一种选择:
var employees = dbContext.Student.Include( s => s.department ).Where(p => p.lastupdatedon > addedAfter);
...
这将导致生成一个连接两个表的查询。