Как создать сеанс только для чтения в nHiberate? - PullRequest
16 голосов
/ 20 апреля 2009

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

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

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

Установка режима очистки на никогда - односторонняя, но обратимая (то есть некоторый код может сбросить режим очистки).

Ответы [ 4 ]

14 голосов
/ 20 апреля 2009

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

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

6 голосов
/ 24 марта 2011

Посмотрите на объекты только для чтения, которые стали доступны в NHibernate 3.1 GA https://nhibernate.jira.com/browse/NH-908

1 голос
/ 29 июля 2015

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

session.DefaultReadOnly = true

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

В справочной документации NHibernate .

имеется глава об объектах, доступных только для чтения .
0 голосов
/ 02 октября 2012

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

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

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

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