如何在多对多关联的情况下使用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));

但是我很困惑在多对多的情况下如何使用将来。谁能告诉我这里是否应该用将来时?

如何在多对多关联的情况下使用Future query Nhibernate

如果我正确理解了你的问题,你想为具体的学期选择学生,那么你可以使用这样的东西:

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();