关于究竟懒惰=“额外”能够做什么,是否有一个很好的解释?
我看到的所有帖子都重复了这样一个事实:它将对MyObject.ItsCollection.Count
的引用转换为select count(*)查询(假设它们尚未加载)。
我想知道它是否能够提供更强大的功能,例如将MyObject.ItsCollection.Any(o => o.Whatever == 5)
转换为SELECT ...EXISTS
查询。
docs的第18.1节仅触及它。我不是NH开发人员,因此我无法真正尝试它并观看SQL事件探查器而不需要做一些工作来设置所有内容;我只是想找一些描述这个功能的参考资料。
谢谢!
答案 0 :(得分:20)
对于版本2.x它仅用于将collection.Count()
翻译为select count
,据我所知,在源代码中,它还允许构造collection[5]
获取该特定实体(索引为5)而不是保护整个集合。
对于版本3.x,我没有在发行说明中看到任何相关内容
答案 1 :(得分:5)
尝试使用lazy =“extra”
映射的集合Customer.Orders
上调用Any()
customer.Orders.Any()
,生成的SQL语句看起来像这样(简化):
SELECT *
FROM Order
WHERE CustomerId = 120
而在致电时
customer.Orders.Count > 0
生成的SQL看起来像这样:
SELECT count(*)
FROM Order
WHERE CustomerId = 120
答案 2 :(得分:4)
lazy = extra允许计算集合的元素而无需获取它,因为惰性实体用代理装饰,当客户端代码要求集合上的.Count
时,正确“ select count
“向数据库发出查询。如果没有lazy=extra
,则从数据库中读取集合。