nhibernate - Web 应用程序中的异步查询,使用 NHibernate

标签 nhibernate asynchronous

在 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/

相关文章:

nhibernate - 我在使用 Nhibernate Query Over fetch 时做错了什么吗?

nhibernate - NHibernate:获取任意条件查询返回的行数的通用方法

mysql - Orchard 中的后台运行功能

c# - LINQ 查询中单个表的多个计数

python - Tornado 在执行器中运行和定义异步方法之间的区别

linq - NHibernate 3 - 扩展 Linq 提供者 BaseHqlGeneratorForMethod.BuildHql 问题

node.js - Node : Trying to rename every file in a directory skips over some

javascript - 有一种简单的方法可以确保 JavaScript 中 forEach/for 循环的正确顺序吗?

javascript - 异步for循环

javascript - 等待后未执行异步/等待代码