0

我在学生和教授 (_students_selected) 之间的数据库(带有桥接表)中建模了一个多对多关系,在我的实体中,我将其建模为一对多关系,即教授有一个学生。

 HasManyToMany<Student>(Reveal.Member<Professor>("_students"))
   .Table("_students_selected").ChildKeyColumn("student_key").ParentKeyColumn("professor_key");

public class Professor    
{
        private IList<Students> _students;
        public virtual Student Student
        {
            get { return _students.FirstOrDefault(); }
        }
}

上述方法在获取数据时有效,但是在查询教授时,我无法为学生添加 where 条件,因为实际数据已映射到私有支持字段 _students。我如何查询这个?下面的代码不起作用。

_unitOfWork.Session.QueryOver<Professor>().Where(i => i.Student.Id == 24).List();
4

1 回答 1

1

NHibernate 无法将属性内的 C# 代码转换为 SQL,它只能使用映射的属性。要么在语句中使用集合(当然它需要是公共/内部的),要么在内存中过滤结果(但要小心选择 n + 1 个问题)。

于 2011-09-16T07:09:48.263 回答