Что значит Ленивый в NHibernate - PullRequest
2 голосов
/ 06 марта 2012

Я новичок в NHibernate - также в EntityFramework, я изучаю их. Я вижу ключевое слово Lazy в NH и EF, но не могу понять его. Как вы можете объяснить Lazy для пяти лет? Это кажется важным. Можете ли вы объяснить это простыми словами, пожалуйста?

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

Что означает каждый из них? Спасибо заранее.

Ответы [ 2 ]

5 голосов
/ 06 марта 2012

Ленивая загрузка - это метод, используемый ORM (например, EF, NH и Linq2SQL), при котором связанные объекты в иерархии не извлекаются немедленно.Вместо этого связанные сущности выбираются только в том случае, если они необходимы, как правило, когда они «перемещаются» или разыменовываются.

Например, в модели класса у вас может быть класс Person, который имеет Collection(например, IEnumerable) из Pets, которым он / она владеет.

Если вы используете ленивую загрузку при извлечении Человека, соответствующая коллекция домашних животных не будет извлечена одновременно.Таким образом, ресурсы базы данных и памяти сохраняются.

Однако, если к коллекции Pets обращаются (и при условии, что контекст / сеанс ORM все еще доступен), тогда ORM пойдет и выберет Pets на«по мере необходимости».

Сравните это с энергичной загрузкой (например, LoadsWith L2SQL или Include EF), когда вызывающий явно указывает, какие из связанных сущностей будут выбраны вместе с Person.

См. Также здесь: Ленивая загрузка, отложенная загрузка и полная загрузка в платформе Entity

Повторное обновление Айенде объясняет, почему вы используете ленивую загрузку без прокси (в отличие от прокси ленивая загрузка) здесь .NoLazy отключает отложенную загрузку (т. Е. Загружается с нетерпением)

Вы можете узнать больше о методах, используемых для реализации отложенной загрузки в Wiki .Реализация шаблона NH-прокси обсуждается здесь

2 голосов
/ 06 марта 2012

Ленивый означает, что он создает свойство объекта только тогда, когда к нему обращались один раз.Таким образом, вы можете создавать тысячи объектов, которые не используют память, они просто ссылаются на пустые объекты, пока вы их не используете.

...