NHibernate 中的 Lazy 是啥意思
Posted
技术标签:
【中文标题】NHibernate 中的 Lazy 是啥意思【英文标题】:What does Lazy mean in NHibernateNHibernate 中的 Lazy 是什么意思 【发布时间】:2012-03-06 11:17:39 【问题描述】:我是NHibernate
的新手-也在EntityFramework
中,我正在学习它们。我在NH
和EF
中都看到了Lazy
关键字,但我无法理解。您如何为一个五岁的孩子解释Lazy
?似乎很重要。可以用简单的语言解释一下吗?
更新:
在 NHibernate 3.2 代码映射中,我们有:
ManyToOne(t => t.SomeProperty, t => t.Lazy(LazyRelation.Proxy));
LazyRelation
有这个静态值:
public abstract class LazyRelation
public static LazyRelation Proxy;
public static LazyRelation NoProxy;
public static LazyRelation NoLazy;
是什么意思?提前致谢。
【问题讨论】:
【参考方案1】:延迟加载是 ORM(例如 EF、NH 和 Linq2SQL)使用的一种技术,它不会立即检索层次结构中的相关实体。相反,只有在需要时才会获取相关实体,通常是在它们被“导航到”或取消引用时。
例如在一个类模型中,你可能有一个类Person
,它的Collection
(例如IEnumerable
)是他/她拥有的Pets
。
如果在获取 Person 时使用延迟加载,则不会同时获取相关的 Pets 集合。这样可以节省数据库和内存资源。
但是,如果 Pets 集合被访问(并且假设 ORM 的 Context / Session 仍然可用),那么 ORM 将根据“需要”去获取 Pets。
将此与急切加载(例如LoadsWith
L2SQL 或Include
EF)进行比较,其中调用者明确声明将与人员一起获取哪些相关实体。
参见此处:Lazy loading, Deferred Loading and Eager Loading in Entity framework
重新更新 Ayende 解释了为什么要使用无代理延迟加载(相对于代理延迟加载)here。 NoLazy 禁用延迟加载(即急切加载)
您可以阅读更多关于 implement lazy loading on Wiki 所用技术的信息。 NH 的代理模式实现在讨论here
【讨论】:
【参考方案2】:懒惰意味着它只在对象被访问一次时创建它的属性。 通过这种方式,您可以实例化数千个不使用内存的对象,它们只是对空对象的引用,直到您使用它们为止。
【讨论】:
以上是关于NHibernate 中的 Lazy 是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
越南语M? xác nh?n kh?ng ?úng.是啥意思?