2

我是的新手 - 我还在EntityFramework,我正在学习它们。我在NHEF中看到Lazy关键字,但我无法理解它。如何解释Lazy五岁?这似乎很重要。你能用简单的语言来解释一下吗?懒惰在NHibernate中有什么意思

UPDATE:

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; 
} 

是什么意思每他们?先谢谢了。

回答

5

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

例如在班级模型中,您可能拥有Person的班级,该班级的Collection(例如IEnumerable)是他/她拥有的Pets

如果您在获取Person时使用延迟加载,则不会同时获取相关的Pets集合。这样,数据库和内存资源就得到保存。然而,如果Pets集合被访问(并且假设ORM的上下文/会话仍然可用),那么ORM将根据需要去取得宠物。

将此与Eager加载(例如LoadsWith L2SQL或Include EF)进行比较,其中调用方明确指出将与Person一起提取哪个相关实体。

也见这里:Lazy loading, Deferred Loading and Eager Loading in Entity framework

重新更新 Ayende解释了为什么你会不使用代理延迟加载(与代理延迟加载)here。 NoLazy禁用延迟加载(即急切加载)

您可以阅读关于用于implement lazy loading on Wiki的技术的更多信息。 讨论NH的代理模式实现here

2

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