Возможно, сначала вам следует перейти на последнюю стабильную версию NHibernate (2.1.2, AFAIK), хотя я сам предпочитаю использовать альфа-версию 3.0. Более поздние версии, как правило, имеют более высокую стабильность и производительность, чем более ранние. И я думаю, что API NHibernate достаточно обратно совместим, чтобы сделать это.
Итак, мое рекомендуемое решение для вас это:
Если вам ДЕЙСТВИТЕЛЬНО требуется энергичная загрузка, количество запросов, используемых для возврата объекта вместе с полным графом объектов, будет по-прежнему огромным, но не беспокойтесь, есть надежда !
NHibernate - это ORM уровня предприятия, что означает, что он очень хорошо масштабируется. Он может использовать различные стратегии кэширования для различных сценариев.
Имеет внутренний кеш для:
- Сущность
- Коллекция
- Запросы
- Timestamps
И у него есть два уровня:
- Кэш первого уровня: кэширует данные для одного
ISession
экземпляра. Он включен по умолчанию.
- Кэш второго уровня: кеширует вещи для всего того же
ISessionFactory
. По умолчанию он выключен.
Приведенное выше описание является для меня очень простым, но это именно то, что вам нужно. Вы можете найти больше информации на эту тему в nhibernate.info и блоге Айенде , , нескольких вопросах в StackOverflow , а также в других местах.
Вам нужно сделать две вещи:
- Убедитесь, что все ваши
ISession
получены от одного и того же ISessionFactory
- Включить кэш второго уровня (вышеупомянутые ссылки помогут вам в этом)
Благодаря этому подходу вы получите много преимуществ, но в основном потому, что все загруженные вами сущности будут кэшироваться, потребуется только один раз запросить их у базы данных. После этого они будут приходить из кеша. Это уменьшает количество обращений к базе данных, значительно .