Управление сессиями для одноэлементного объекта с помощью NHibernate - PullRequest
2 голосов
/ 15 марта 2011

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

Одной из других служб является служба настроек сайта, которая эффективно управляет единичным узлом: существует только один экземпляр SiteSettings.Я могу также следовать шаблону сеанса для запроса с этим сервисом, но это кажется странным.Мне действительно нужно создавать новый сеанс для каждого запроса здесь?Почему бы не создать единый сеанс для сервиса и продолжать его использовать?Одним из преимуществ шаблона сеанса на запрос является то, что сеанс в конечном итоге не кэширует все объекты в модели.Однако, поскольку я буду загружать только один экземпляр в сеансе, я думаю, это не должно вызывать беспокойства.Будет ли мне лучше использовать IStatelessSession, а не ISession?

Есть ли здесь другие причины использовать сеанс для запроса?Одна проблема, которая приходит на ум, - это то, что происходит в случае отключения от БД.Могу ли я продолжать использовать один и тот же сеанс даже после ошибки БД?

Кроме того, я думал о сохранении каждого параметра в отдельном столбце, что означает, что я должен обновлять схему при изменении параметров.Я нашел этот пост: Веб-приложение NHibernate - Управление пользовательскими настройками , где один из комментариев против использования таблицы для хранения таких параметров конфигурации.Мне трудно придумать альтернативы (если не считать сериализации всего класса и хранения его как капли).Есть ли разные подходы?

1 Ответ

0 голосов
/ 15 марта 2011

Сеансы не являются поточно-ориентированными, поэтому я думаю, что вам понадобится более одного для вашего синглтона

Можно ли продолжать использовать один и тот же сеанс даже после ошибки БД?

Нет, предположительно это вызвало бы исключение, и вы не должны повторно использовать сеансы после исключения.ИМХО, вам следует придерживаться сеанса для каждого шаблона запроса.

Существуют ли другие подходы?

Можно ли использовать разные строки для параметра конфигурации?Таким образом, ваш объект User будет иметь дочернюю коллекцию объектов UserSetting.Каждый UserSetting будет просто парой ключ-значение.

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