CallSessionContext,ThreadLocalSessionContext和ThreadStaticSessionContext之间的区别

时间:2011-07-11 16:31:04

标签: nhibernate

来自NHibernate documentation,但没有多大解释。

这三者之间有什么区别?

在哪种情况下,其中一种情况比其他情况更可取?

P.S。文档中不存在ThreadLocalSessionContext,但它确实存在于 NHibernate dll中。

1 个答案:

答案 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文档和上面的描述之间,您可以更好地了解应该使用的上下文。