【发布时间】:2012-05-02 08:07:53
【问题描述】:
我一直在试图弄清楚为什么这个查询经理和他或她的团队只返回团队集合的第一个条目。显然,这是因为我在查询末尾有 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");
【问题讨论】:
-
您可以从生成的 SQL 中看出这是如何发生的,因为问题查询生成了 sql “FETCH NEXT 1 ROWS ONLY”,这大概意味着只会返回第一个连接记录。我不清楚的是如何让 FirstOrDefault 与 Fetch 一起正常工作。
标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping