【问题标题】:nhibernate collection query with private backing field具有私有支持字段的休眠集合查询
【发布时间】:2011-11-17 21:00:40
【问题描述】:

我在学生和教授 (_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();

【问题讨论】:

    标签: nhibernate fluent-nhibernate backing-field


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多