2010-08-27 2 views
1

Я получаю следующее сообщение об ошибке в приложении Asp.Net Замок ActiveRecord при попытке обновить объект:Как найти объект в/замок ActiveRecord сессии NHibernate

«другой объект с тем же значением идентификатора уже связано с сеансом «

Я посмотрел вверх и вниз по моему коду, чтобы увидеть, где еще объект мог быть создан, но я его не вижу. Это непонятно, поскольку у меня есть тот же самый код на другой странице, который отлично работает при обновлениях.

Теперь я думаю о попытке увидеть, где находится этот другой объект на Сессии, и либо убить его, либо узнать, как он попал в сессия. Как я могу найти этот объект?

[Обновить] Итак, я наконец нашел, где объект вызывается. Тем не менее, мне все равно хотелось бы узнать, как найти объекты в сессии для дальнейшего использования.

+0

Вы используете объекты, сохраненные в сеансе ViewState или (ASP.NET)? – Jerome

+0

Да, я сохраняю копию на странице ViewState. – KeithA

ответ

1

Если вам нужно проверить, находится ли объект в вашей сессии, вы, вероятно, делаете неправильный путь с самого начала. Пересмотрите, как вы управляете своим сеансом и постоянными объектами.

Это, пожалуйста, попробуйте ISession.Contains(), но IIRC он будет работать, только если вы проверите с точный экземпляр, который хранится в сеансе.

+0

Проблема заключалась в использовании этих объектов в выпадающем списке. Эти объекты в раскрывающемся списке не нужно сохранять, и я не уверен, как заставить объекты загружаться и забывать о них, кроме явного вызова Evict на объекты, как только они больше не понадобятся. Думаю, правильный термин для них был бы временным? – KeithA

+0

@KeithA: рассмотрите привязку данных к DTO, в противном случае вызовите Evict на постоянные объекты. –