マネージャーとそのチームを求めるこのクエリが Team コレクションの最初のエントリのみを返す理由を突き止めようとしています。どうやら、クエリの最後に FirstOrDefault があったためです。FirstOrDefault がクエリ全体に適用されるという印象を受けましたが、Team コレクションにも適用されているようです。
元のクエリ (チームの最初のメンバーのみを表示):
session.Query<IEmployee>()
.Where(p => p.PersonalNumber == PersonalNumber)
.Fetch(p => p.Team)
.Fetch(p => p.Manager)
.FirstOrDefault();
チーム全体を返す新しいクエリ:
session.Query<IEmployee>()
.Where(p => p.PersonalNumber == PersonalNumber)
.Fetch(p => p.Team)
.Fetch(p => p.Manager)
.ToList().FirstOrDefault();
このクエリを作成する正しい方法は何ですか? 回避策が必要なのは、これを適切に行っていないことを意味します。
背景 - マッピング:
これは、Manager が IEmployee であり、Team が IEmployee の IList である基本的な階層関係です。
References(x => x.Manager).Column("ManagerId");
HasMany(x => x.Team)
.AsList(index => index.Column("TeamIndex"))
.KeyColumn("ManagerId");