如何使用MySQL对多个请求在NHibernate中对Session进行多线程处理?

NeoSketo

我已经在我的MVC C#应用程序中使用NInject MVC5实现了NHibernate。一切正常,但是我意识到当我双击链接时总是会收到错误:{“已经有一个与此连接相关联的打开的DataReader,必须先关闭它。”}

或者

{“会话关闭!\ r \ n对象名称:'ISession'。”}

现在我知道这是因为我将IContentService接口绑定到ISession。我也知道ISession不是线程安全的,只能使用一次。所以我的问题是...那我应该如何创建一个可以在多个线程中同时使用InRequestScope的会话。因为我知道用户会双击或用户会同时单击一个链接,而另一个用户正在单击相同的链接,所以停止多个用户的错误并不是很理想。

我在注射中有这个:

 Bind<IContentService>().To<ContentService>().InRequestScope();

            Bind<ISession>() //I'm sure the problem is right here, but not sure.
               .ToMethod(
                   context =>
                       context.Kernel.Get<IMasterSessionSource>().GetSession())
               .WhenInjectedInto<IContentService>()
               .InRequestScope();

我的ContentService

public interface IContentService
    {
        IQueryable<Question> Questions{ get; }
    }


 public class ContentService : IContentService
    {
        private readonly ISession _session; //I think the problem might be here too...

        public ContentService(ISession session)
        {
            _session = session;
        }

        public IQueryable<Question> Questions
        {
            get { return _session.Query<Question>(); }
        }
    }

更新

我读了我应该如何使用ISessionFactory进行多线程处理,但是我无法像ISession那样绑定它。

NeoSketo

原来我在每个请求的会话中正确地进行了多线程。问题是NHibernate的一个主要问题是MySQL太早关闭了会话。感谢您的回应。这绝对是一个很难解释的问题。

更新

在这里找出答案:会话已关闭对象名称:'ISession'。在NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed()-如何阻止会话过早关闭

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中对两个计数器进行多线程处理?

在使用Keras进行的深度学习中如何利用多处理和多线程的优势?

在Java多线程中如何使用CountDownLatch?

如何在junit中使用未捕获的异常处理程序进行多线程测试?

如何在Reactor中进行多线程文件处理

如何使用Python多线程处理MySQL连接

如何对glfw键盘回调进行多线程处理?

如何使用zeromq和线程处理或异步处理对python程序的多个请求?

如何使用JavaFX进行多线程

如何通过同一功能对我的代码进行多线程处理以同时处理多个文件?

使用RedisQueueInboundGateway进行多线程处理

在Python中使用多线程进行实时视频处理

如何在要抓取的网址列表中安全地进行多线程处理?

如何实现请求的多线程或多处理

使用python中的openCV进行多线程图像处理

如何使用线程处理多个GET请求并进行比较

如何在C#中使用多线程进行批处理

如何在合并排序中对合并操作进行多线程处理?

Java多线程处理mysql

如何处理对mysql的多线程请求以获取空闲行?

使用多线程Java进行数据处理

如何在python中进行多线程处理?

如何使用多线程在MySQL中获取数据

使用多个线程处理单个 HTTP 请求

使用线程处理多个请求

c# 如何使用多线程处理来自多个线程的多个返回值?

使用 C++ 中的类进行多线程处理

使用 pulsar 消息侦听器进行多线程处理

使用 System.Reactive 的扩展对代码进行多线程处理