NHibernate懒惰="额外"

Ada*_*kis 13 nhibernate

关于究竟lazy ="extra"能够做什么,有没有一个很好的解释?

我看到的所有帖子都只是重复这样一个事实:它将引用转换MyObject.ItsCollection.Count为select count(*)查询(假设它们尚未加载).

我想知道它是否能够提供更强大的功能,比如MyObject.ItsCollection.Any(o => o.Whatever == 5)变成SELECT ...EXISTS查询.

文档的第18.1节仅涉及它.我不是NH开发人员,因此我无法真正尝试它并观看SQL事件探查器而不需要做一些工作来设置所有内容; 我只是在寻找某种参考来描述这个功能的功能.

谢谢!

Jag*_*uar 20

对于版本2.x,它仅用于将a collection.Count()转换为a select count,并且就我在源代码中看到的而言,它还将允许构造collection[5]获取该特定实体(使用索引5)而不是对整个集合进行保湿.

对于版本3.xi在发行说明中没有看到任何相关内容

  • @ sp1ky如果集合大小很小,并且您经常访问其中的几个成员,则lazy = extra将导致数据库的额外往返. (3认同)

小智 5

刚尝试在Customer.Orders使用lazy ="extra"映射的Collection上调用Any()

customer.Orders.Any()
Run Code Online (Sandbox Code Playgroud)

并且生成的SQL语句看起来像这样(简化):

SELECT *
FROM Order
WHERE CustomerId = 120
Run Code Online (Sandbox Code Playgroud)

而在打电话的时候

customer.Orders.Count > 0
Run Code Online (Sandbox Code Playgroud)

生成的SQL看起来像这样:

SELECT count(*)
FROM Order
WHERE CustomerId = 120
Run Code Online (Sandbox Code Playgroud)