LazyInitializationException в приложении ASP.NET с NHibernate - PullRequest
0 голосов
/ 28 ноября 2010

Использование NHibernate с ASP.NET 4.

У меня не было проблем с извлечением объектов, но я только что дошел до точки с вложенными объектами, которую не могу понять.

Я использую lazy = true и при доступе к коллекции отложенной загрузки я получаю сообщение:

Initializing[type#3]-failed to lazily initialize a collection of role: [type], no session or session was closed

Даже если я вызываю SessionFactory.OpenSession () непосредственно перед объектом, являющимся объектомдоступ, это не имеет значения.Я также попытался получить доступ к коллекции в , используя блок ISession , но безуспешно.

Изменить, чтобы добавить - у меня есть current_session_context_class = web set в web.config, и я использую CurrentSessionContext.Привязка к BeginRequest.

Может кто-нибудь предложить какой-нибудь совет?

Не приложение MVC

Я читал это - не знаю, насколько оно точнои это Hibernate: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2878

Это говорит о какой-то ошибке в отношениях «многие ко многим».

Вот мое отображение HBM:

<bag name="Objects" table="ObjectInstance" cascade="all" lazy="true">
  <key column="branchId" />
  <many-to-many class="InventoryObjectInstance" column="objectInstanceId" />
</bag>

Ответы [ 3 ]

1 голос
/ 28 ноября 2010

Это происходит после выполнения некоторых операций сохранения / обновления?Где и когда вы закрываете сессию?Для меня это звучит так, как будто вы закрываете сеанс сразу после вызова сохранения или каким-либо другим методом, прежде чем веб-страница будет обработана.Другими словами, убедитесь, что вы используете шаблон Open Session in View, и закрывайте сеанс только в конце текущего веб-запроса.Вы также можете проверить это сообщение .

0 голосов
/ 28 ноября 2010

По какой-то причине вы получаете новую ISession, когда вызываете SessionFactory.OpenSession ().Вы впервые используете сеанс с доступом к нему в блоке using?В любом случае, почему вы снова вызываете OpenSession - что случилось со ссылкой на сеанс?

0 голосов
/ 28 ноября 2010

При получении графов объектов они сохраняют ссылку на сеанс, который их породил. Они используют этот сеанс для отложенной загрузки своих свойств. Если исходный сеанс закрыт, вы получите эту ошибку (или такую ​​же, как она) при попытке доступа к ним. Открытие новой сессии не поможет.

Вы можете попытаться найти место закрытия исходного сеанса запроса и остановить его. Вы в той же просьбе, хотя? В противном случае вы можете попытаться подключить ваш объект к новому сеансу - я думаю, что это Session.Lock(YourObject). В качестве альтернативы вы можете снова извлечь объект из нового сеанса.

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