Смешивание потоков сеанса NHibernate в приложении WPF - PullRequest
0 голосов
/ 10 августа 2011

Я нахожусь в процессе создания приложения WPF с богатым интерфейсом.Проблема, с которой я работал с самого начала, заключается в том, что пользовательский интерфейс блокируется всякий раз, когда пользователь меняет свои фильтры.Первоначально я исправил проблему, запросив базу данных с помощью NHibernate в BackgroundWorker.Это работало достаточно хорошо в течение короткого промежутка времени, но NHibernate часто выдает различные исключения, например, жалуется, что сессия уже открыта.

Как я могу смешать сеанс NHibernate и многопоточность в приложении WPF?

Я думаю, что, потому что я внедряю открытый экземпляр ISession в свой репозиторий и использую этот репозиторий в нескольких разных потоках, что, возможно, было бы лучше просто ввести вместо него ISessionFactory и открыть новый сеанс в моих функциях репозитория.

Обновление

В сценарии, в котором используется BackgroundWorker, пользователь может выбрать одну из многих ролей.Каждый раз, когда роль проверяется или снимается, я использую фоновый рабочий для запроса базы данных.Если вы проверяете две роли действительно быстро, то NHibernate выдает исключение, сообщающее, что сеанс уже используется, потому что он все еще пытается извлечь данные для первого действия проверки.

По сути, было бы неплохо обнаружить, что еслиNHIbernate уже выполняет запрос, чтобы отменить его и начать выполнение нового.Это имело бы смысл, потому что если пользователь выбирает 2 роли (таким образом, требуя 2 запроса), то первый запрос больше не действителен.

Есть идеи?

1 Ответ

1 голос
/ 18 августа 2011

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

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