来自NHibernate documentation,但没有多大解释。
这三者之间有什么区别?
在哪种情况下,其中一种情况比其他情况更可取?
P.S。文档中不存在ThreadLocalSessionContext
,但它确实存在于 NHibernate dll中。
答案 0 :(得分:7)
目前无法使用 ThreadLocalSessionContext 。没有任何配置支持它的使用,它只在NHibernate中通过单元测试引用。
根据代码 CallSessionContext 是一种在.Net远程处理中处理会话的方法,请参阅下面的代码中的注释以获取更多详细信息。看起来NHibernate基本上将会话存储在远程调用上下文中。有关远程呼叫上下文的更多信息,请访问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 用于处理多线程应用程序中的会话。它使用[ThreadStatic]属性来声明会话,以便每个线程都有一个会话。我目前正在使用它。有关如何使用它的代码示例,请参阅此SO链接:What is the best NHibernate session management approach for using in a multithread windows service application?
此外,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>
要回答您的第二个问题,这实际上取决于您实施的应用程序类型以及您如何使用会话。希望在nhibernate文档和上面的描述之间,您可以更好地了解应该使用的上下文。