Как создать сеанс readonly в nHiberate?
Возможно ли создать соединение только для чтения в nHibernate?
Только для чтения: где nHibernate не будет скрывать или явно никакие изменения в базовой базе данных.
При закрытии соединения nhibernate он автоматически отключает изменения в постоянном объекте.
Настройка режима флеша никогда не является одним из способов - но может быть обратимым (т.е. какой-то код может reset режим флеша).
Ответы
Ответ 1
Я думаю, что вы уже нашли решение, чтобы отключить режим флеша. Да, это изменчиво, но даже если это не так, код может просто создать еще один сеанс с другим режимом очистки.
Я думаю, что подходящее решение состоит в том, чтобы предлагать только для чтения с помощью session.FlushMode = FlushMode.Never
и применять его, используя соединение с базой данных, у которой есть только разрешения SELECT (или что-то подходящее для вашей ситуации). Поддержание отдельных фабрик ISessionFactory может помочь, разрешив что-то вроде ReadOnlySessionFactory.Create()
.
Ответ 2
Взгляните на объекты только для чтения, которые стали доступны в NHibernate 3.1 GA
https://nhibernate.jira.com/browse/NH-908
Ответ 3
В NHibernate появилась новая функция readonly (я не знаю, какая версия, но она в 3.3.0 наверняка). Вы можете настроить сеанс только на чтение:
session.DefaultReadOnly = true
Он отключает кеш для старых значений и, следовательно, повышает производительность и потребление памяти.
Существует глава о объектах только для чтения в ссылке NHibernate документация.
Ответ 4
Накопление обновлений и просто никогда не покраснение кажется мне плохим решением.
Я задал аналогичный вопрос. В предлагаемом решении используется другой подход. Все события установлены в пустые и, таким образом, игнорируются. Я чувствую, что это лучший подход.
Я удивлен, что это нелегко сделать. Мне нравится подход к инфраструктуре сущности с использованием метода расширения .AsNoTracking(), который гарантирует, что запросы только для чтения остаются таким образом.
Как создать сеанс только для чтения NHibernate с Fluent NHibernate, который не накапливает обновления?