我一直在努力解決爲什麼這個查詢要求經理和他或她的團隊只返回團隊集合的第一個條目。顯然,這是因爲在查詢結束時我有FirstOrDefault。我覺得FirstOrDefault可以應用到整個查詢中,但它似乎也適用於Team集合。爲什麼這兩個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。
References(x => x.Manager).Column("ManagerId");
HasMany(x => x.Team)
.AsList(index => index.Column("TeamIndex"))
.KeyColumn("ManagerId");
您可以從生成的SQL告訴這是怎麼發生的,因爲問題查詢生成的SQL「FETCH NEXT 1行僅對」這大概意味着,只有第一個加入的記錄將被退回。我不清楚如何讓FirstOrDefault與Fetch正常工作。 – kasey