SaveOrUpdate против обновления и сохранения в NHibernate - PullRequest
59 голосов
/ 20 июля 2009

В чем разница между SaveOrUpdate и Save / Update в NHibernate. Почему бы вам просто не использовать SaveOrUpdate? Кроме того, в чем смысл SaveOrUpdateCopy?

1 Ответ

71 голосов
/ 20 июля 2009

Глава 9 охватывает все это лучше, чем я могу:

http://nhibernate.info/doc/nh/en/index.html

Но заметки в скале:

Save() берет новый объект без идентификатора и присоединяет его к сеансу. Объект будет INSERT 'd.

Update() берет существующий объект, который имеет идентификатор, но отсутствует в сеансе, и присоединяет его к сеансу. Объект будет UPDATE 'd.

SaveOrUpdate() смотрит на идентификатор и решает, что необходимо в приведенном выше.

SaveOrUpdateCopy() отличается тем, что у вас есть два объекта с одинаковым идентификатором - один в сеансе, а другой нет. Если вы попытаетесь и update тот, который не в сеансе, исключение выдается нормально (вы сейчас пытаетесь присоединить два объекта, которые представляют один и тот же постоянный объект к сеансу). SaveOrUpdateCopy() копирует состояние объекта без сеанса в состояние объекта сеанса.

Я не уверен, как вы собираетесь использовать NH, но во многих случаях все, что вам нужно, это Save(). Сессия выполняет ВСЕ работы, необходимые для того, чтобы знать, что нужно обновить, и просто Flush() или Commit() делает все, что вам нужно.

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