Как использовать NHibernate CurrentSessionContext в таймере - PullRequest
0 голосов
/ 29 октября 2009

Я создаю класс репозитория, который использует ISessionFactory.GetCurrentSession(), чтобы найти текущий сеанс, с которым должны работать его методы, и использовал CurrentSessionContext.Bind, чтобы связать сеанс в моем приложении. Внутри конфигурации NHibernate я использовал thread_static как мой current_session_context_class.

До сих пор это прекрасно работало. В каждом потоке я создал новый сеанс, который будет использоваться экземпляром репозитория.

Но когда я использую System.Threading.Timer, обратный вызов будет вызываться в любом потоке в ThreadPool. Так что я не могу связать сеанс за пределами выполнения одного обратного вызова, потому что следующий обратный вызов может быть выполнен в другом потоке.

Как следует обрабатывать сеансы (с CurrentSessionContext или без) в System.Threading.Timer, если один сеанс должен использоваться при двух или более выполнениях обратного вызова?

1 Ответ

0 голосов
/ 30 октября 2009

Сессия должна быть привязана к единице работы. Похоже, вам просто нужен новый сеанс при каждом обратном звонке. Сессии очень легкие для создания.

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