2014-08-30 4 views
0

Интересно, что является лучшим способом управления NHibernate Session Context при использовании слоя данных NH из контроллера Xsockets. В частности, я ссылаюсь на самостоятельное приложение wininservice/console или роль рабочего агента Azure, , где HTTPContext недоступен. Конечно, всегда есть возможность создавать и удалять сеанс для каждого звонка, но это означает, что вы поражаете производительность, поэтому лучше повторите сеансы повторного использования. Мой контроллер предоставляет API для операций CRUD в базовом хранилище NH и подталкивает обновления соответствующим подписчикам, когда некоторые записи обновляются в БД.XSockets.Net - как управлять NHibernate Session Context

Ваши идеи оценили :)

ответ

0

Я использую StructureMap для обработки зависимостей и создать NestedContainer для обработки сеанса для каждого запроса. Не нужно больше связываться с CurrentSessionContext или HttpContext для хранения сеанса.

http://structuremap.github.io/the-container/nested-containers/

Можно даже просто создать промежуточное программное обеспечение UnitOfWork, если вы используете Owin с WebAPI.

0

Поскольку XSockets имеет состояние это будет плохо для вашей базы данных, если открыть соединение в случае OnOpen, так как соединение будет оставаться открытым, пока сокет открыт. Лучше всего использовать репозиторий только в методах, вызывающих операции CRUD, как можно короче.

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

Я с удовольствием рассмотрю любой код, который у вас может быть.

С уважением Uffe

+0

Спасибо Уффе. К счастью, я только собираюсь написать эту реализацию, но я хочу повторно использовать слой данных, используемый в другой службе. Итак, ваше предложение состоит в том, чтобы создавать и распоряжаться сеансом при каждом вызове методов контроллера? Сессия NHibernate - это больше, чем просто соединение с SQL, которое вы, скорее всего, получаете из пула. Это кэширование сущностей и т. Д. Из опыта я знаю, что создавать его каждый раз и когда это возможно, используя контекст ThreadStatic, дает значительный прирост производительности. –

+0

У меня никогда не возникало проблем с получением экземпляра службы внутри метода, инкапсулированного в область использования. Образец на pastepin http://pastebin.com/trv9TRCP – Uffe

+0

Этот образец представляет собой службу разрешения контейнеров NInject IOC. Я говорю о контекстной политике сеанса NHibernate: http: //nhforge.org/wikis/reference2-0en/context-sessions.aspx –

Смежные вопросы