Моя основная форма приложения (WinForms) имеет DataGridView, который использует DataBinding и Fluent NHibernate для отображения данных из базы данных SQLite. Эта форма открыта на все время работы приложения.
По соображениям производительности я установил соглашение DefaultLazy.Always () для всех обращений к БД.
Пока что единственный способ, с помощью которого я нашел эту работу, - это постоянно держать сеанс (назовем его MainSession) открытым для главной формы, поэтому NHibernate может лениво загружать новые данные, когда пользователь перемещается с помощью сетка.
Другая часть приложения может работать в фоновом режиме и сохранять в БД. В настоящее время (после значительной борьбы) мой подход заключается в вызове MainSession.Disconnect (), создании одноразового сеанса для каждого сохранения и MainSession.Reconnect () после завершения сохранения. В противном случае SQLite выдаст исключение «Файл базы данных заблокирован».
Пока что это работает хорошо, но прошлый опыт заставлял меня нервничать из-за того, что долгое время оставался открытым для сеанса (у меня возникли проблемы с производительностью, когда я пытался использовать один сеанс для сохранений и загрузок - кеш) заполнил и завалил все - см. Фиксация ОЧЕНЬ медленная в моем проекте NHibernate / SQLite ).
Итак, мой вопрос - это хороший подход или я смотрю на проблемы в будущем?
Если это плохой подход, каковы альтернативы? Я думал об открытии и закрытии моего основного сеанса всякий раз, когда пользователь перемещается с сеткой, но для меня не очевидно, как я это сделаю - перехватывать каждое событие из сетки, которое может вызвать ленивую загрузку?
У меня есть ноющее чувство, что попытка управлять своими собственными сессиями таким образом является в корне неправильным подходом, но неясно, какой из них правильный.
Редактировать
Прошло уже больше года с тех пор, как я задал этот вопрос ... и оказалось, что сохранение основного сеанса открытым в течение всего срока службы приложения действительно приводило к проблемам с производительностью.
Кажется, что в эти дни на SO появляется гораздо больше пользователей NH - кто-нибудь хочет предложить лучший подход?