Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql、Ninject和NHibernate—已经有一个与此连接关联的开放数据读取器,必须先关闭它_C#_Mysql_Nhibernate_Ninject - Fatal编程技术网

C# MySql、Ninject和NHibernate—已经有一个与此连接关联的开放数据读取器,必须先关闭它

C# MySql、Ninject和NHibernate—已经有一个与此连接关联的开放数据读取器,必须先关闭它,c#,mysql,nhibernate,ninject,C#,Mysql,Nhibernate,Ninject,我使用的是一个MySQL数据库,我使用Fluent NHibernate访问该数据库,并使用Ninject连接每个请求的会话,如下所示: Kernel.Bind<ISession>() .ToMethod(context => Kernel.Get<ISessionFactory>().OpenSession()) .InRequestScope(); Kernel.Bind() .ToMethod(

我使用的是一个MySQL数据库,我使用Fluent NHibernate访问该数据库,并使用Ninject连接每个请求的会话,如下所示:

        Kernel.Bind<ISession>()
            .ToMethod(context => Kernel.Get<ISessionFactory>().OpenSession())
            .InRequestScope();
Kernel.Bind()
.ToMethod(上下文=>Kernel.Get().OpenSession())
.InRequestScope();
我确实有
OnDeactivation(x=>x.Dispose())但已被告知不需要,因为Ninject将为您调用Dispose

一切都很好,除了有几次我双击一个链接,导致读到“已经有一个打开的DataReader与此连接关联,必须先关闭。”

我读到我需要启用多个活动记录集(MARS),但我认为MySQL不支持这一点


我能做些什么来消除这个错误吗?

这是因为通过Parrell.ForEach在多个线程中使用了NHibernate


因此,基本上不要在多个线程中使用单个会话

你的工厂是如何建立起来的?您使用的是事务吗?不,我使用的是一个通用存储库,其中每个方法中都有一个事务。如何在整个请求中使用事务?
ISessionFactory
的绑定在哪里?另外,您是否验证了在显式打开和关闭会话时不会发生此错误?很可能这实际上与Ninject无关,并且代码的某些部分没有正确考虑NHibernate的惰性计算。首先,我要查找任何线程、异步任务、异步页面或可能比会话寿命长的对象(例如存储在会话或缓存中)。