NHibernate - сессия синглтон C # - PullRequest
       3

NHibernate - сессия синглтон C #

3 голосов
/ 03 декабря 2010

Попытка перенести NHibernate в существующее приложение C # WinForms, и в настоящее время я ищу лучший способ управления сессиями.Я только изучаю NHibernate, поэтому, пожалуйста, извините за недостаток знаний, кто-то может предоставить мне любой код управления сеансом, который мы можем использовать, большинство найденных реализаций для веб-приложений.оценили.

1 Ответ

1 голос
/ 03 декабря 2010

Предполагая, что вы уже знакомы с XML и самой конфигурацией NHibernate, есть один объект, который вам нужно сделать одноэлементным, а именно ISessionFactory API. Причина, по которой это должно быть сделано как единое целое, состоит в том, что полная конфигурация в отношении вашего соединения, а также все сопоставления сущностей загружаются в память, чтобы NHibernate знал, как и где сохранить его в базовом хранилище данных. Следовательно, API ISessionFactory является очень дорогостоящим для реализации.

Что касается сессий, необходимо рассмотреть два аспекта: хотите ли вы сеанс без состояния или с полным состоянием. Этот выбор полностью за вами, но знайте разницу.

API ISession отслеживает каждое отдельное изменение присоединенного объекта. Присоединенный объект - это объект, который либо был загружен из базового хранилища данных с использованием одного из возможных способов, предоставляемых NHibernate, либо, с другой стороны, временный объект, который только что был создан, и который вы присоединили к сеансу. Поддержание такого полного состояния сеанса для toolong может привести к потере данных, поскольку наступит время утечки этого API в память. Как только происходит утечка, весь трек изменений удаляется, и сеанс больше не может использоваться. API ISession всегда должен использоваться вместе с API ITransaction. ITransaction, скорее всего, совпадает с Begin Transaction непосредственно в SQL (TSQL, PL / SQL и другие). Каждый раз, когда вам необходимо сохранить базу данных, вы должны делать это во время использования транзакции, чтобы избежать ошибок, отменяющих изменения или что-либо еще. API ISession должен создаваться в начале единицы работы. Один только ISession экземпляр API может потребоваться для обработки более чем одной формы одновременно. Тем не менее, создание экземпляра API ISession синглтоном является действительно очень плохой идеей по причине управления памятью, для которого ISession отслеживает все изменения, происходящие с присоединенным объектом. Слишком долгое поддержание API ISession в действии заставит его использовать все больше и больше памяти, что приведет к утечкам памяти и мусору в сеансе.

API IStatelessSession делает то, что говорит. Будучи без сохранения состояния, он не отслеживает изменения, внесенные в прикрепленный объект. Таким образом, вам придется вручную знать, что нужно сделать как действие против базы данных для этой сущности, которую вы намереваетесь сохранить, скажем так. IStatelessSession также использует API ITransaction, с помощью которого он может обрабатывать целостность данных. Они оба всегда должны использоваться вместе при подключении к хранилищу данных. IStatelessSession часто используется при создании, когда это необходимо, поскольку у него нет другого применения, кроме как «общаться» с хранилищем данных. Я полагаю, что этот API в основном используется в веб-приложениях, где правила без сохранения состояния наиболее распространены.

Как только вы выбрали то, что лучше всего соответствует вашим требованиям между ISession и IStatelessSesion API, вы готовы к работе.

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