我有一段代码需要根据来自数据库的数据返回一个分隔的字符串,除了提到注释的行之外,所有代码都运行正常。 我知道单个DbContext在单个实例时不能用于多个QUERIES。
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,“部门”是另一个表,因此是“员工”的外键...... 如果我不清楚,请告诉我。
现在任何帮助都会像为我赢得两个世界:)
答案 0 :(得分:3)
第一个解决方法:
var employees = dbContext.Student.Where(p => p.lastupdatedon > addedAfter).ToList();
...
这将关闭与student表的连接,但会向延迟加载部门生成其他查询。
另一种选择:
var employees = dbContext.Student.Include( s => s.department ).Where(p => p.lastupdatedon > addedAfter);
...
这会导致生成一个连接两个表的查询。