从NHibernate文档来看,它并没有解释太多.
这三者有什么区别?
在哪种情况下,其中一种情况比其他情况更可取?
PS ThreadLocalSessionContext在文档中不存在,但它确实存在于NHibernate DLL中.
它看起来不像当前可以使用的ThreadLocalSessionContext.没有任何配置支持它的使用,它只在NHibernate中通过单元测试引用.
根据代码,CallSessionContext是一种在.Net远程处理会话的方法,请参阅下面的代码中的注释以获取更多详细信息.看起来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.
Run Code Online (Sandbox Code Playgroud)
ThreadStaticSessionContext用于处理多线程应用程序中的会话.它使用[ThreadStatic]属性来声明会话,以便每个线程都有一个会话.我目前正在使用它.请参阅此SO链接以获取如何使用它的代码示例:在多线程Windows服务应用程序中使用的最佳NHibernate会话管理方法是什么?
除此之外,看起来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>
Run Code Online (Sandbox Code Playgroud)
要回答您的第二个问题,这实际上取决于您正在实施的应用程序类型以及您如何使用会话.希望在nhibernate文档和上面的描述之间,您可以更好地了解应该使用的上下文.