Как создать сеанс readonly в nHiberate?

Возможно ли создать соединение только для чтения в nHibernate?

Только для чтения: где nHibernate не будет скрывать или явно никакие изменения в базовой базе данных.

При закрытии соединения nhibernate он автоматически отключает изменения в постоянном объекте.

Настройка режима флеша никогда не является одним из способов - но может быть обратимым (т.е. какой-то код может reset режим флеша).

Ответы

Ответ 1

Я думаю, что вы уже нашли решение, чтобы отключить режим флеша. Да, это изменчиво, но даже если это не так, код может просто создать еще один сеанс с другим режимом очистки.

Я думаю, что подходящее решение состоит в том, чтобы предлагать только для чтения с помощью session.FlushMode = FlushMode.Never и применять его, используя соединение с базой данных, у которой есть только разрешения SELECT (или что-то подходящее для вашей ситуации). Поддержание отдельных фабрик ISessionFactory может помочь, разрешив что-то вроде ReadOnlySessionFactory.Create().

Ответ 3

В NHibernate появилась новая функция readonly (я не знаю, какая версия, но она в 3.3.0 наверняка). Вы можете настроить сеанс только на чтение:

session.DefaultReadOnly = true

Он отключает кеш для старых значений и, следовательно, повышает производительность и потребление памяти.

Существует глава о объектах только для чтения в ссылке NHibernate документация.

Ответ 4

Накопление обновлений и просто никогда не покраснение кажется мне плохим решением. Я задал аналогичный вопрос. В предлагаемом решении используется другой подход. Все события установлены в пустые и, таким образом, игнорируются. Я чувствую, что это лучший подход.

Я удивлен, что это нелегко сделать. Мне нравится подход к инфраструктуре сущности с использованием метода расширения .AsNoTracking(), который гарантирует, что запросы только для чтения остаются таким образом.

Как создать сеанс только для чтения NHibernate с Fluent NHibernate, который не накапливает обновления?