我使用 NHibernate 和 QueryOver API 来查询我的域实体。问题是得到重复的结果。例如在查询以下域时:
我使用如下代码:
var list = Session.QueryOver<Post>()
.JoinQueryOver<Comment>(x => x.Comments)
.Where(c => c.Name == "Name")
.Take(5)
.List();
生成的 SQL 将如下所示:
SELECT Top(5) * FROM Posts p left outer join Comments c on p.Id = c.PostId
这里的问题是左连接完成后,结果记录集有超过 5 行。然后TOP
函数应用并削减结果。因此,例如,如果第一篇文章有 5 条评论,我会得到这篇文章 5 次,不会得到其他人。
我知道它为什么会发生,并找到了一篇关于它的好帖子。但是是否有一个投影会告诉 nhibernate 只Post
从实体中选择列而不从实体中添加列Comment
?也许应该使用其他方法(不是 JoinQueryOver)?