Lazy在NHibernate中意味着什么

age*_*t47 2 nhibernate orm entity-framework lazy-loading lazy-evaluation

我是新手NHibernate- 也是EntityFramework,我正在学习它们.我看到了Lazy在这两个关键字NHEF,但我无法理解.你如何解释Lazy五岁?这似乎很重要.你能用简单的话解释一下吗?

更新:

NHibernate 3.2代码映射中,我们有:

ManyToOne(t => t.SomeProperty, t => t.Lazy(LazyRelation.Proxy));
Run Code Online (Sandbox Code Playgroud)

LazyRelation有这样的静态值:

public abstract class LazyRelation {
    public static LazyRelation Proxy;
    public static LazyRelation NoProxy;
    public static LazyRelation NoLazy;
}
Run Code Online (Sandbox Code Playgroud)

他们每个人意味着什么?提前致谢.

Stu*_*tLC 5

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

例如,在类模型中,您可能有一个类Person,它具有Collection(例如IEnumerable)Pets他/她拥有的类.

如果您在获取Person时使用延迟加载,则不会同时获取相关的Pets集合.这样,节省了数据库和内存资源.

但是,如果访问Pets集合(并且假设ORM的上下文/会话仍然可用),那么ORM将根据"需要"来获取宠物.

将此与Eager加载(例如LoadsWithL2SQL或IncludeEF)进行比较,其中调用者明确说明将与Person一起提取哪些相关实体.

另请参见此处:实体框架中的延迟加载,延迟加载和预先加载

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

您可以阅读有关在Wiki上实现延迟加载的技术的更多信息.这里讨论NH的代理模式实现