【发布时间】:2015-08-13 16:30:46
【问题描述】:
所以我试图在 KendoUI MVC 网格中列出员工和相应的数据,通过 YearPlanViewModel。
这是模型。
public class YearPlanViewModel
{
public int? ID { get; set; }
public String EmployeeName { get; set; }
public List<Business.CompensationDayRequest> CompensationDays { get; set; }
public List<Business.EmployeeVacationDay> VacationDays { get; set; }
public List<Business.Displacement> Displacementes { get; set; }
public List<Business.CriticalTask> CriticalTasks { get; set; }
public List<Tuple<Business.Absence,Business.TimePeriod>> Absences {get;set;}
}
所以,对于我的网格的 DataSource 函数,这是我的查询
List<YearPlanViewModel> a = wtmEntities.Employee.ToList().Select(employee => new YearPlanViewModel
{
ID = employee.IDEmployee,
EmployeeName = employee.FirstName + " " + employee.LastName,
CompensationDays = employee.CompensationDayRequests.Where(cr => cr.Employee.IDEmployee == employee.IDEmployee && cr.Date.Year == 2015).ToList(),
VacationDays = employee.EmployeeVacationDays.Where(vc => vc.Employee.IDEmployee == employee.IDEmployee && vc.Day.Year == 2014).ToList()
,
Displacementes = employee.Displacements.Where(d => d.Employee.IDEmployee == employee.IDEmployee && d.StartDate.Year == 2014).ToList(),
Absences = employee.Absences.Join(wtmEntities.TimePeriods,
abs => abs.Period,
tps => tps.IDTimePeriod,
(abs, tps) => new { abs, tps })
.Where(x => x.abs.Employee.IDEmployee == employee.IDEmployee)
.ToList()
.Select(t => new Tuple<Business.Absence, Business.TimePeriod>(t.abs, t.tps)).ToList()
,
CriticalTasks = wtmEntities.CriticalTasks.Where(ct => ct.IDPerson == employee.IDPerson).ToList()
}).ToList();
但是我得到了标题所说的错误,主要是因为补偿日、位移等都引用了员工,这就是为什么会有循环引用。
但是,他们告诉我应该在查询中使用 Includes,以免发生这种情况,所以我尝试使用 CompensationDays 并使用 Employee Class 而不是 ViewModel。
List<Business.Employee> a = wtmEntities.Employee.Include(e => e.CompensationDayRequests).ToList();
循环引用问题仍然存在,我不知道应该如何更改我的查询,以免再次发生。谁有帮助,谢谢。 :)
【问题讨论】: