在 Web 应用程序中,Session 仅在当前线程中可用。
有没有人有在新的异步线程中通过 NHibernate 执行查询的任何提示?
例如,我怎么能做这样的工作:
public void Page_Load()
{
ThreadPool.QueueUserWorkItem(state => FooBarRepository.Save(new FooBar()));
}
最佳答案
您需要有一个对于非 Web 上下文足够智能的 session 上下文。但更重要的是,新线程应该有自己的 session 。
您可以使用以下内容:
private ISession threadSession
{
get
{
if (HttpContext.Current != null)
{
return (ISession)HttpContext.Current.Items["THREAD_SESSION"];
}
return (ISession)AppDomain.CurrentDomain
.GetData("THREAD_SESSION" + Thread.CurrentThread.ManagedThreadId);
}
set
{
if (HttpContext.Current != null)
{
HttpContext.Current.Items["THREAD_SESSION"] = value;
}
else
{
AppDomain.CurrentDomain.SetData("THREAD_SESSION"
+Thread.CurrentThread.ManagedThreadId, value);
}
}
}
关于nhibernate - Web 应用程序中的异步查询,使用 NHibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712575/