Я создаю класс репозитория, который использует ISessionFactory.GetCurrentSession()
, чтобы найти текущий сеанс, с которым должны работать его методы, и использовал CurrentSessionContext.Bind
, чтобы связать сеанс в моем приложении. Внутри конфигурации NHibernate я использовал thread_static
как мой current_session_context_class
.
До сих пор это прекрасно работало. В каждом потоке я создал новый сеанс, который будет использоваться экземпляром репозитория.
Но когда я использую System.Threading.Timer
, обратный вызов будет вызываться в любом потоке в ThreadPool. Так что я не могу связать сеанс за пределами выполнения одного обратного вызова, потому что следующий обратный вызов может быть выполнен в другом потоке.
Как следует обрабатывать сеансы (с CurrentSessionContext
или без) в System.Threading.Timer
, если один сеанс должен использоваться при двух или более выполнениях обратного вызова?