Entity framework 懒惰在NHibernate中是什么意思

Entity framework 懒惰在NHibernate中是什么意思,entity-framework,nhibernate,orm,lazy-loading,lazy-evaluation,Entity Framework,Nhibernate,Orm,Lazy Loading,Lazy Evaluation,我是新来的NHibernate——同样在EntityFramework中,我正在学习它们。我在NH和EF中都看到了Lazy关键字,但我无法理解它。你如何解释五岁孩子的懒惰?这似乎很重要。你能用简单的话解释一下吗 更新: 在NHibernate 3.2代码映射中,我们有: ManyToOne(t => t.SomeProperty, t => t.Lazy(LazyRelation.Proxy)); LazyRelation具有以下静态值: public abstract class

我是新来的
NHibernate
——同样在
EntityFramework
中,我正在学习它们。我在
NH
EF
中都看到了
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;
}

他们每个人的意思是什么?感谢advanced。

延迟加载是ORM(如EF、NH和Linq2SQL)使用的一种技术,因此不会立即检索层次结构中的相关实体。相反,相关实体只有在需要时才会被获取,通常是在“导航到”或取消引用时

e、 g.在类模型中,您可能有一个类
Person
,该类包含他/她拥有的
宠物的
集合(例如
IEnumerable

如果在抓取此人时使用延迟加载,则不会同时抓取相关的Pets集合。这样,就节省了数据库和内存资源

但是,如果访问了Pets集合(并且假设ORM的上下文/会话仍然可用),则ORM将“根据需要”去获取宠物

将此与即时加载(例如,使用
L2SQL或
Include
EF的
LoadsWith)进行比较,其中调用者明确说明将与此人一起获取哪些相关实体

另见此处:

重新更新 Ayende解释了为什么不使用代理延迟加载(相对于代理延迟加载)。 NoLazy禁用延迟加载(即,立即加载)

你可以阅读更多关于使用的技巧。
NH的代理模式实现已在讨论中

懒惰意味着它只在对象被访问一次时创建对象的属性。 通过这种方式,您可以实例化数千个不使用内存的对象,它们只是对空对象的引用,直到您使用它们为止