У меня есть простая тестовая модель объекта, в которой есть школы, а в школе есть коллекция студентов.nHibernate коллекции и критерии псевдонима
Я хотел бы получить школу и всех ее учеников, которые находятся выше определенного возраста.
Выполняю следующий запрос, который получает данную школу, и дети, которые старше определенного возраста:
public School GetSchoolAndStudentsWithDOBAbove(int schoolid, DateTime dob)
{
var school = this.Session.CreateCriteria(typeof(School))
.CreateAlias("Students", "students")
.Add(Expression.And(Expression.Eq("SchoolId", schoolid), Expression.Gt("students.DOB", dob)))
.UniqueResult<School>();
return school;
}
Это все работает отлично, и я могу видеть запрос собирается в базу данных и возвращая ожидаемое количество строк.
Однако, когда я выполняю одно из следующих действий, это дает мне общее количество студентов в данной школе (независимо от предыдущего запроса), запустив еще один запрос:
foreach (Student st in s.Students)
{
Console.WriteLine(st.FirstName);
}
Assert.AreEqual(s.Students.Count, 3);
Может кто-нибудь объяснить, почему ?
Представляется, что запрос критерии работает 2 запросов. который запускает WHERE (this_.SchoolId = @ p0 и students1_.DateTime> @ p1); @ p0 = '1', @ p1 = '01/01/1997 00:00:00 ' Присоединение к школе и ученику. затем тот, который просто получает необходимую школу – Youeee