我一直在努力解决为什么这个查询要求经理和他或她的团队只返回团队集合的第一个条目。显然,这是因为在查询结束时我有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