【发布时间】:2014-05-18 21:32:56
【问题描述】:
我正在尝试限制 NHibernate Criteria 将返回的实体数量。标准似乎是使用 SetMaxResults,但如果我的 Criteria 涉及多对多关系上的 LEFT OUTER JOIN,这将无法正常工作。
一个例子:
狗有主人(多对多关系),我需要检索最多 10 条属于某组主人的狗。正在做
session.CreateCriteria<Dog>()
.CreateAlias("Owners", "Owners")
.Add(Restrictions.In("Owners.Id", idCollection)
.SetMaxResults(10)
.List<Dog>();
将转换为类似的 SQL 查询
SELECT TOP(10) * FROM DOGS d
LEFT OUTER JOIN OWNERS_DOGS od ON d.id = od.id
WHERE od.OWNER_ID IN (:valueone, :valuetwo)
我的 TOP 限制发生得太早,导致拥有多个符合条件的狗的主人多次计入我的 10 限制。有没有一种干净的方法告诉 NHibernate 我只希望它为第一条 X 狗补充水分对象?我可能无法在数据库上执行完整的 SELECT,但如果我可以避免加载系统中的每条狗,那就太好了,因为我只会显示其中的 10 条。
【问题讨论】:
-
但是你不是被owner_id限制了吗?这意味着拥有多个所有者的狗不应该成为问题(除非您允许 owner_dogs 中的重复行)?
-
感谢您指出这一点。我的真实世界场景要复杂一些。我修复了这个例子,使其更适用。
标签: nhibernate many-to-many max