Я хочу перестроить многопоточное приложение NHibernate с реализацией сеанса на запрос.
Теперь это приложение выглядит как сеанс на разговор (на поток) с сохранением сеанса в CurrentSessionContext.
Но эта реализация приносит проблемы с загрузкой кэшированных объектов, которые уже могут быть обновлены из других сеансов.Поэтому я хочу изменить этот код
//main thread
using (nHibernateHelper.OpenConnection()){
List<Bar> bars = BarRepository.Instance.GetAll();
foreach (Bar bar in bars){
//start thread and do some work, for example run DoWork(bar); by other thread
Task.Factory.StartNew(DoWork, bar);
}
}
//other thread
void DoWork(Bar bar){
using (nHibernateHelper.OpenConnection()){
foreach (Foo foo in bar.FooList){
if (foo.SomeState == PredifinedState) {
//call many other functions
}
}
}
}
Основной вопрос: как изменить этот код, чтобы закрыть Session перед запуском другого потока с помощью LazyLoading (Bar содержит отношения к другим объектам, и эти отношения используются воработа), а до вызова других функций из оператора foreach в функции DoWork?