J'ai un modèle d'objet d'essai simple dans lequel il y a des écoles, et une école a une collection d'étudiants.Collections nHibernate et critères d'alias
Je voudrais récupérer une école et tous ses élèves qui ont dépassé un certain âge.
je porte la requête suivante, qui obtient une école donnée et les enfants qui sont au-dessus d'un certain âge:
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;
}
Tout cela fonctionne très bien et je peux voir la requête va à la base de données et retourner le nombre attendu de lignes.
Cependant, lorsque je réalise une des conditions suivantes, il me donne le nombre total d'élèves de l'école donnée (quelle que soit la requête précédente) en exécutant une autre requête:
foreach (Student st in s.Students)
{
Console.WriteLine(st.FirstName);
}
Assert.AreEqual(s.Students.Count, 3);
Quelqu'un peut-il expliquer pourquoi ?
semble que la requête de critères exécute 2 requêtes. celui qui exécute WHERE (this_.SchoolId = @ p0 et students1_.DateTime> @ p1); @ p0 = '1', @ p1 = '01/01/1997 00:00:00 ' rejoindre l'école et l'élève. puis celui qui obtient juste l'école requise – Youeee