MySql, Ninject и NHibernate - уже есть открытый DataReader, связанный с этим подключением, который должен быть закрыт первым - PullRequest
2 голосов
/ 04 августа 2011

Я использую базу данных MySQL, к которой я обращаюсь с помощью Fluent NHibernate и подключил Session-Per-Request к Ninject, например:

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

У меня действительно было OnDeactivation(x=>x.Dispose());, но мне сказали, что в этом нет необходимости, поскольку Ninject вызовет для вас Dispose.

Все прекрасно работает, за исключением нескольких раз, когда я дважды щелкаю ссылку, которая вызывает чтение, которое я получаю "Уже есть открытый DataReader, связанный с этим подключением, который должен быть закрыт первым."

Я прочитал, что мне нужно включить несколько активных наборов записей (MARS), однако я считаю, что это не поддерживается MySQL.

Что я могу сделать, чтобы избавиться от этой ошибки?

1 Ответ

2 голосов
/ 01 сентября 2011

Это произошло из-за использования NHibernate в нескольких потоках через Parrell.ForEach.

Так что, в принципе, не используйте один сеанс в нескольких потоках!

...