如何在多对多关联的情况下使用Future query Nhibernate
本文关键字:Future 情况下 query Nhibernate 关联 | 更新日期: 2023-09-27 18:02:03
我在学生和课程之间有多对多的关系。
public class Student
{
public virtual Id {get; set;}
public virtual Name {get; set;}
public virtual IList<Course> Courses {get; set;}
}
public class Course
{
public virtual Id {get; set;}
public virtual Name {get; set;}
public virtual IList<Student> Students {get; set;}
}
这些实体有相应的表,包括一个多对多的CourseToStudent表。
我想使用Nhibernate future编写最优化的查询来获取课程或学生。
我知道我可以在一对多中使用将来时态,但是我们怎么能用将来时态来写多对多查询呢?
例如,对于某些一对多查询,一个学期可以有很多门课程,但是一个课程只能属于一个学期。
所以我可以把未来的查询写成
Semester= _repository.Future<Entity.Semester>(_repository.Query<Entity.Semester>().where(x=>x.Id = semesterId));
Course= _repository.Future<Entity.Course>(_repository.Query<Entity.Course>().where(x=>x.Semester.Id = semesterId));
但是我很困惑在多对多的情况下如何使用将来。谁能告诉我这里是否应该用将来时?
如果我正确理解了你的问题,你想为具体的学期选择学生,那么你可以使用这样的东西:
session.Query<Student>()
.Where(s => s.Courses.Any(c => c.Semester.Id = semesterId))
.Future();
或
session.Query<Course>()
.Where(c => c.Semester.Id = semesterId)
.SelectMany(c => c.Students)
.Future();