joh*_*oss 7 c# nhibernate fluent-nhibernate
我目前有这个Fluent NHibernate配置:
public class NHibernateConfig
{
public static Configuration Configure()
{
var cfg = Fluently.Configure()
.Database(Config.PersistenceConfiguration)
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<SomeAssembly>();
m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>(); })
.ExposeConfiguration(x => x.SetProperty("current_session_context_class", "thread_static"))
.BuildConfiguration();
return cfg;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是暴露的属性" current_session_context_class".我知道两个值:thread_static或web.我的一位同事指出了另一个价值,即电话.有关于此属性的值的任何已知文档吗?如果没有,对这些值有什么好的描述吗?我已经花了几个小时搜索谷歌一些解释没有有效的结果.
这是我试图解释这些(欢迎任何额外的输入):
CallSessionContext,ThreadLocalSessionContext和ThreadStaticSessionContext之间的区别
在标准的NH文档中有一节关于这些,但我认为他们没有很好地解释它或提供有关如何使用它的任何示例.这是NH文档链接.
http://nhibernate.info/doc/nhibernate-reference/architecture.html#architecture-current-session
StackOverflow上有几篇关于如何使用它的好文章:
在多线程Windows服务应用程序中使用的最佳NHibernate会话管理方法是什么?
NHibernate.HibernateException:没有绑定到当前上下文的会话
"managed_web","call","thread_static"和"web"是可能的值.在nhibernate配置中配置如下:
<property name="current_session_context_class">call</property>
Run Code Online (Sandbox Code Playgroud)
配置完成后,您可以使用SessionFactory.GetCurrentSession().你必须自己绑定和取消绑定会话.一个示例实现:
if (CallSessionContext.HasBind(_sessionFactory))
{
session = SessionFactory.GetCurrentSession();
}
else
{
session = SessionFactory.OpenSession();
CallSessionContext.Bind(session);
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用ManagedWebSessionContext或ThreadStaticSessionContext代替CallSessionContext.
ManagedWebSessionContext - 适用于Asp.Net应用程序.会话附加到当前的HttpContext(绑定时作为参数提供).
ManagedWebSessionContext.Bind(HttpContext.Current,session)
Run Code Online (Sandbox Code Playgroud)
ThreadStaticSessionContext - 会话附加到当前线程(我不鼓励使用它,因为线程会突然切换,并且您的附加会话可能会丢失).
CallSessionContext - 适用于非Web应用程序.会话附加到CallContext.我可能错了,但我想这是会话附加到SessionFactory本身.只要整个应用程序有一个SessionFactory,这种方法将确保您永远不会获得并发活动会话.
| 归档时间: |
|
| 查看次数: |
15192 次 |
| 最近记录: |