Nie wygląda jak ThreadLocalSessionContext może być obecnie używany. Nie ma konfiguracji, która obsługuje jego użycie i jest ona wymieniona tylko w NHibernate przez test jednostkowy.
Zgodnie z kodem CallSessionContext jest sposobem obsługi sesji w .Net zdalnym wyświetlaniu komentarzy w kodzie poniżej, aby uzyskać więcej szczegółów. Wygląda na to, że NHibernate zasadniczo przechowuje sesję w kontekście zdalnego połączenia. Więcej informacji na temat usług zdalnych konteksty połączeń można znaleźć here
/// <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 jest używany do obsługi sesji w aplikacjach wielowątkowych. Używa on atrybutu [ThreadStatic] do deklarowania sesji w taki sposób, że istnieje sesja na wątek. Obecnie używam tego. Zobacz to tak odnośnik na przykład kodu w jaki sposób z niego korzystać: What is the best NHibernate session management approach for using in a multithread windows service application?
Ponadto oprócz tego wygląda NHibernate jest dodanie innego kontekstu sesji w wersji 3.2 o nazwie WcfOperationSessionContext. Poniżej znajduje się opis z kodem:
/// <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>
Aby odpowiedzieć na to pytanie 2nd to naprawdę zależy od tego, jaki rodzaj aplikacji, wdrażanie i jak używasz sesje. Mam nadzieję, że między dokumentacją nhibernate a powyższymi opisami będziesz miał lepszy obraz tego, z jakiego kontekstu powinieneś skorzystać.