я тоже Раймонд :)
я есть отношения родитель-ребенок междуTeacher
а такжеStudentReport
, каждыйStudentReport
имеет запись поля метки времени, когда учитель закончил отчет. У меня есть запрос, чтобы найти всех учителей, которые завершили один или несколько своих отчетов за определенное количество минут назад:
public IList<Teacher> FindRecentlyActiveTeachers(int intervalMinutes)
{
if (intervalMinutes <= 0)
throw new ArgumentException("Interval must be a positive number of minutes");
DateTime activityCutoff = DateTime.Now.AddMinutes(-1 * intervalMinutes);
return Session.QueryOver<Teacher>()
.Left.JoinQueryOver<StudentReport>(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();
}
Это возвращает правильный список учителей, но дочерняя коллекция для каждого учителя содержит только те отчеты, которые соответствуют критерию выбора. Я хотел бы, чтобы коллекция отчетов каждого соответствующего учителя содержала все отчеты, а не только несколько отчетов, которые соответствуют критериям.
Есть ли способ, которым я могу либо загружать полную дочернюю коллекцию с нетерпением, либо отказаться от загрузки в этом запросе и положиться на ленивую загрузку?
Обновить
Это решение:
return Session.QueryOver<Teacher>()
.Fetch(t => t.StudentReports).Eager
.JoinQueryOver<StudentReport>(t => t.StudentReports)
.Where(r => r.FirstSaveTimestamp >= activityCutoff)
.TransformUsing(Transformers.DistinctRootEntity)
.List<Teacher>();