Проблема, на которую вы ссылаетесь, связана с «серверными курсорами», и, насколько мне известно, nHibernate , это не должно быть проблемой , просто потому, что она их не использует.Если вы используете LINQ для загрузки объектов в nHibernate, при первом доступе к перечислению foreach nHibernate загружает в память весь набор результатов запроса, и таким образом он может использовать соединение сеанса для загрузки всего остального.При использовании HQL-запроса или критериев, он будет загружать набор результатов, когда вы вызываете «List ()», а затем закрывает соединение.
Структура сущностей с другой стороны, старайтесь быть умными и использовать серверные курсорыпри прокрутке коллекции с помощью перечисления foreach, поэтому соединение objectContext «занято» курсором на стороне сервера до завершения перечисления foreach.Если MARS не включен, EF не может использовать соединение для загрузки другого набора результатов (вы все равно можете выдавать другие операторы, такие как обновление, вставка и удаление), и, таким образом, он выдаст вам ошибку типа ". Уже существует открытый DataReader.связан с этой Командой, которая должна быть сначала закрыта"или чем-то подобным.
Надеюсь, это поможет,MarcoРЕДАКТИРОВАТЬ:После некоторых исследований я обнаружил, что nHibernate может использовать MARS, но все же в версии 3.2.0.4000 нет драйвера для SqlServer, который его поддерживает.Конечно, SqlClientDriver не поддерживается (так как он предназначен для Sql2000, который не поддерживает MARS), но даже в Sql2008ClientDriver соответствующее свойство имеет значение false.В любом случае, это то, что я опубликую в команде nHibernate как можно скорее