Загрузить против Get в Nhibernate - PullRequest
2 голосов
/ 04 апреля 2010

Главная страница в моем веб-приложении выполняет аутентификацию и загружает пользовательский объект, используя Get.

После этого всякий раз, когда пользовательский объект нужен элементам управления пользователя или любому другому классу, я делаю Load.

Обычно nhibernate должен загружать объект из кэша или возвращать постоянный загруженный объект всякий раз, когда Load вызвано. Но это не то поведение, которое демонстрирует мое веб-приложение. NHprof всегда показывает sql всякий раз, когда вызывается Load. Как проверить правильность поведения Load?

Я использую архитектуру S # arp framework.

Ответы [ 2 ]

6 голосов
/ 20 апреля 2011

На самом деле вызов Load для объекта, не отмеченного как ленивый, вызывает немедленную загрузку. Это потому, что не ленивые сущности никогда не проксируются. В этом случае он действует так же, как Get.

2 голосов
/ 05 апреля 2010

Если вы используете «Get», то происходит попадание в базу данных. Если вы используете Load, никакого попадания в базу данных не производится, но объект (в вашем случае User) создается с «отложенной загрузкой». Поэтому, когда вы проверяете свойство, оно знает, что вам нужны данные, поэтому оно обращается к базе данных с запросом для получения данных.

Если вы хотите получить объект из кэша, вам нужно рассмотреть 2 варианта. Кэш первого уровня - это кэш, который используется в ОДНОМ сеансе. Поэтому, когда вы закрываете сеанс или загружаете один и тот же объект в другой сеанс, вы получаете дополнительные попадания. Кэш второго уровня работает во всех сессиях. Если один сеанс получает объект, другой сеанс получает его из кэша.

Итак, вам нужен кэш второго уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...