0

私は、学生と教授(_students_selected)の間のデータベース(ブリッジテーブルを使用)でモデル化されたマントツーマンの関係を持っています。私の全体では、1対多の関係としてモデル化しています。つまり、教授には1人の学生がいます。

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

上記はデータを取得するときに機能しますが、教授にクエリを実行する場合、実際のデータはプライベートバッキングフィールド_studentsにマップされているため、学生にwhere条件を追加できません。これをクエリするにはどうすればよいですか?以下のコードは機能しません。

_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 に答える