具有私有支持字段的nhibernate集合查询

时间:2011-09-15 12:57:10

标签: nhibernate fluent-nhibernate backing-field

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

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

1 个答案:

答案 0 :(得分:1)

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