Как правильно использовать объект NHibernate ISession - Сеанс Закрыт! ошибки

Подсказка в вопросе: используйте DATALENGTH(). Обратите внимание, что это имеет различное поведение к LEN():

SELECT LEN(CAST('Hello   ' AS NVARCHAR(MAX))), 
       DATALENGTH(CAST('Hello   ' AS NVARCHAR(MAX))), 
       DATALENGTH(CAST('Hello   ' AS NTEXT))

возвраты 5, 16, 16.

, Другими словами, DATALENGTH() не удаляет конечные пробелы и возвращает число байтов, тогда как LEN() обрезки конечные пробелы и возвращают количество символов.

9
задан Ozair Kafray 20 October 2015 в 12:39
поделиться

2 ответа

Вы всегда должны использовать session.Dispose (); Другой - для очень странных происшествий

13
ответ дан 4 December 2019 в 10:33
поделиться

Советую прочитать документацию ISession по https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/ISession.cs

В любом случае, правильный способ очистить после завершения сеанса - удалить это (или лучше, окружите использование оператором using). В этом случае «using» закрывает сеанс и подавляет финализатор, то есть предотвращает ненужное выживание объекта сеанса при следующей сборке мусора и сохраняет память.

Если соединение уже закрыто, его удаление не вызовет исключения . С другой стороны, закрытие после удаления (или после закрытия) вызывает исключение.

В документации рекомендуется вызывать разъединение вместо закрытия, поскольку это освобождает соединение с пулом соединений. Вы должны вызвать Reconnect перед использованием отключенного сеанса.

Для своих нужд я всегда использую "

6
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: