Разница между CallSessionContext, ThreadLocalSessionContext и ThreadStaticSessionContext - PullRequest
6 голосов
/ 11 июля 2011

Из документации NHibernate , это мало что объясняет.

В чем разница между этими тремя?

В какой ситуации один из этих контекстов предпочтительнее других?

P.S. ThreadLocalSessionContext не существует в документации, но существует в NHibernate dll.

1 Ответ

7 голосов
/ 11 июля 2011

Это не похоже на ThreadLocalSessionContext в настоящее время может использоваться. Конфигурация, поддерживающая его использование, отсутствует, и на нее ссылается только в рамках NHibernate при помощи модульного теста.

Согласно коду CallSessionContext - это способ обработки сессий в .Net remoting, для получения более подробной информации см. Комментарии в коде ниже. Похоже, что NHibernate в основном сохраняет сеанс в контексте удаленного вызова. Более подробную информацию об условиях удаленного вызова можно найти здесь

/// <summary>
/// Provides a <see cref="ISessionFactory.GetCurrentSession()">current session</see>
/// for each <see cref="System.Runtime.Remoting.Messaging.CallContext"/>.
/// Not recommended for .NET 2.0 web applications.

ThreadStaticSessionContext используется для обработки сеансов в многопоточных приложениях. Он использует атрибут [ThreadStatic] для объявления сеанса таким образом, что для каждого потока существует сеанс. Я в настоящее время использую это. См. Эту ссылку SO для примера кода того, как вы могли бы его использовать: Каков наилучший подход к управлению сессиями NHibernate для использования в многопоточном приложении службы Windows?

Кроме того, похоже, что NHibernate добавляет еще один контекст сеанса в версии 3.2, который называется WcfOperationSessionContext . Ниже приведено описание из кода:

/// <summary>
/// Provides a <see cref="ISessionFactory.GetCurrentSession()">current session</see>
/// for the current OperationContext in WCF. Works only during the lifetime of a WCF operation.
/// </summary>

Чтобы ответить на ваш 2-й вопрос, это действительно зависит от того, какой тип приложения вы используете и как вы используете свои сеансы. Надеюсь, что между документацией nhibernate и приведенными выше описаниями у вас будет лучшее представление о том, какой контекст вам следует использовать.

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