2011-08-04 3 views
2

Fluent NHibernate를 사용하여 액세스하는 MySQL 데이터베이스를 사용하고 있고 Ninject와 같은 Session-Per-Request를 유선처럼 사용하고 있습니다. 그래서 :MySql, Ninject 및 NHibernate - 먼저이 연결과 관련된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다.

 Kernel.Bind<ISession>() 
      .ToMethod(context => Kernel.Get<ISessionFactory>().OpenSession()) 
      .InRequestScope(); 

나는 OnDeactivation(x=>x.Dispose());을 가지고 있지만 Ninject에 당신을 위해 폐기를 호출로 필요하지 않습니다 말씀 드리 지요했다.

내가 읽는 링크를 두 번 클릭하면 "이 연결과 관련된 열려있는 DataReader가 먼저 닫혀 있어야합니다."라는 메시지가 나타나면 모든 것이 잘 작동합니다.

MARS (Multiple Active Record Sets)를 활성화해야한다고 읽었지 만, MySQL에서는이를 지원하지 않습니다.

이 오류를 없애기 위해 할 수있는 일이 있습니까?

+0

어떻게 ISessionFactory가 유선입니까? 거래를 사용하고 있습니까? –

+0

아니요, 저는 각 저장소 내부의 트랜잭션과 함께 일반 저장소를 사용하고 있습니다. 전체 요청에 대해 어떻게 트랜잭션을 사용합니까? –

+0

'ISessionFactory'에 대한 바인딩은 어디에 있습니까? – Aaronaught

답변

2

이것은 Parrell.ForEach를 통해 여러 스레드에서 NHibernate를 사용했기 때문에 발생했습니다.

그래서 여러 스레드에서 단일 세션을 사용하지 마십시오!

관련 문제