другой объект с тем же значением идентификатора уже был связан с сеансом: 10, объекта: Sales.Entities.Ttable1 - PullRequest
6 голосов
/ 06 февраля 2012

Когда я использую session.update (объект), я получаю ошибку ниже, и как я могу исправить эту ошибку? Я даже пытался Session.evict (объект), но это не решается из-за ошибки ниже

 a different object with the same identifier value was already associated with the           session: 10, of entity: Sales.Entities.TTable

Ответы [ 3 ]

17 голосов
/ 06 февраля 2012

Является ли ваше приложение веб-приложением?

Использование Session.Merge(object)

В веб-приложениях вы иногда сериализуете и десериализуете объекты, затем вы создаете новые объекты, поэтому, даже если объекты NHibernate имеют одинаковый идентификатор, ссылка на объект будет другой. Затем вы пытаетесь обновить свой десериализованный объект, NHibernate обнаруживает другой объект с тем же идентификатором, но с другим указателем ссылки, поэтому не знает, какой объект в вашей памяти является «правильным».

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

4 голосов
/ 06 февраля 2012

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

Использование Session.Merge возможноно в большинстве случаев, если вы находитесь в веб-контексте, у вас уже должна быть ссылка, потому что вы, скорее всего, используете Session для запроса.Итак, вопрос:

  • Почему у вас есть объект, который вы пытаетесь сохранить в кеше, но не используете его?
0 голосов
/ 27 ноября 2012

Используйте Session.Clear () перед Session.Update (объект).

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