(Свободно) Nhibernate ленивая загрузка и влияет на Parallel.ForEach - PullRequest
2 голосов
/ 06 августа 2010

У меня есть несколько сущностей, настроенных через FNH для загрузки дочерних сущностей с использованием синтаксиса FetchMode.Eager, когда я запрашиваю экземпляры (из базы данных). Теперь у меня сложилось впечатление, что это будет игнорировать любую ленивую загрузку в отображении и заполнять дочерние объекты «реальными» данными.

Причина, по которой я хочу это сделать, заключается в том, что я хочу использовать Parallel.ForEach для перебора коллекции сущностей и генерирования набора результатов, но я получаю следующую ошибку:

[18000] System.InvalidOperationException:
There is already an open DataReader associated with this Command 
which must be closed first. 

Если я использую 'NHibernateUtil.Initialize' для инициализации всех дочерних объектов, тогда он работает как положено.

Я ошибаюсь в своем понимании использования FetchMode.Eager?

1 Ответ

1 голос
/ 27 марта 2011

Я действительно никогда бы не попытался это сделать. Каждый функционал Parallel.ForEach может работать в отдельном потоке. В зависимости от вашей конфигурации, NHibernate ISession сохраняется в потоке, что означает, что ничто, кроме вызывающего потока, не может получить доступ к сеансу, поэтому весь процесс завершается неудачей.

Лично я бы извлек все это в объект переноса, а затем сделал бы Parallel.ForEach для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...