Я думаю, вы запутались в сессиях. RegistrationFields
является ленивым свойством eventObj
. Именно сессия, которая загрузила eventObj
, будет отвечать за загрузку RegistrationFields
. Вы явно открываете новый сеанс с помощью new SessionScope()
, который создает новый сеанс, к которому eventObj
не привязан; поэтому не существует собственного сеанса для получения данных. Даже если исходный сеанс еще жив, вызов new SessionScope()
вкладывает новый сеанс и скрывает старый, где его нельзя увидеть, пока не будет вызван Dispose()
в текущей области. Объекты не будут автоматически присоединяться к текущей сессии. Это ожидаемое поведение NHibernate.
Похоже, вы пытаетесь выполнить сеанс на единицу работы, что нормально, но тогда загрузка объектов и должна разрешить разрешение ленивых коллекций всех этих объектов внутри этой единицы работы.
Вы можете попробовать перейти к сеансу по запросу (см. Документацию Castle, чтобы узнать, как это сделать) и отменить создание SessionScope. Это сохранит ваши объекты живыми на время запроса страницы (то есть насколько ленивая коллекция должна жить в веб-приложении). Однако вы должны знать, что в этом сценарии любое изменение, которое вы вносите в постоянный объект, будет записано в БД при очистке сеанса (по сути, вы должны рассматривать изменение состояния постоянного объекта как изменение базового объекта). данные, как если бы они были одной и той же операцией - тогда вы не ошибетесь).