私は、マネージャとそのチームに質問するこのクエリがTeamコレクションの最初のエントリのみを返す理由を理解しようとしています。どうやら、それは私が質問の最後にFirstOrDefaultを持っていたからです。 FirstOrDefaultがクエリ全体に適用される印象を受けましたが、チームコレクションにも適用されているようです。なぜこれらの2つのFluent nHibernateクエリが異なる結果を生成するのですか?
オリジナルクエリ(ショーチームで唯一の第一メンバー):
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();
このクエリを策定するための正しい方法でしょうか?回避策が必要なのは、これを正しく実行していないことを意味します。
背景 - マッピング:
これは、マネージャがIEmployeeとチームがIEmployeeのIListをされているとの基本的な階層関係です。 FirstOrDefaultは、あなたが期待通りにデータベース上で動作します。このクエリで
References(x => x.Manager).Column("ManagerId");
HasMany(x => x.Team)
.AsList(index => index.Column("TeamIndex"))
.KeyColumn("ManagerId");
あなたは、問題のクエリはおそらく唯一の最初の参加レコードが返されることを意味している「ONLY次の1行をフェッチ」SQLを生成するので、これが起こっているか生成されたSQLから伝えることができます。 FirstOrDefaultをFetchで正しく動作させる方法は私には分かりません。 – kasey