Сеанс NHibernate подразумевается относительно недолгим, поэтому, как правило, не рекомендуется поддерживать его в течение более длительного периода времени. Сеанс кэширует объекты, и чем больше объектов выбирается, тем больше данных кэшируется, если вы каким-либо образом не управляете кэшированием. Это приводит к снижению производительности.
Документы NHibernate описывают ISession так:
Однопоточный, недолговечный объект, представляющий диалог между приложением и постоянным хранилищем. Оборачивает соединение ADO.NET. Фабрика для ITransaction. Содержит обязательный (первый уровень) кэш постоянных объектов, используемый при навигации по графу объектов или поиске объектов по идентификатору.
Я бы предложил использовать сеанс для разговора, т. Е. Если у вас есть несколько операций дБ, которые «принадлежат друг другу», вы используете один и тот же сеанс для этих операций, но когда эти операции выполнены, вы закрываете сеанс.
Таким образом, использование нового сеанса для каждого обрабатываемого сообщения звучит как хорошая идея.