学校があり、学校には生徒のコレクションがある単純なテスト オブジェクト モデルがあります。
特定の年齢以上の学校とそのすべての生徒を取得したいと考えています。
次のクエリを実行して、特定の学校と特定の年齢以上の子供を取得します。
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);
誰でも理由を説明できますか?