Как мне создать сущность через RESTful PUT с помощью NHibernate? - PullRequest
3 голосов
/ 24 октября 2010

Согласно философии REST, операция PUT должна создать сущность, если она не существует, или обновить , если она существует. Например, если клиент выполняет эту операцию:

PUT http://server/user/5?firstname=John&lastname=Doe

Я должен ожидать, что пользователь с идентификатором 5 будет либо создан, либо обновлен.

Обновление легко с NHibernate; просто найдите пользователя и обновите имя и фамилию.

Однако как мне создать пользователя с идентификатором 5? По умолчанию NHibernate управляет всеми идентификаторами сущностей. Даже если вы установите идентификатор самостоятельно, NHibernate проигнорирует его и заменит его собственным. Если я переключусь на использование назначенных идентификаторов, то я могу назначить нового пользователя с идентификатором 5, но тогда я потеряю многие функции NHibernate.

Итак, другими словами, есть ли способ настроить NHibernate для использования сгенерированного идентификатора, если он не предоставлен, и для использования идентификатора пользователя, если он указан? Если нет, то как мне обойти эту проблему создания PUT с помощью NHibernate?

1 Ответ

0 голосов
/ 24 октября 2010

Если вы делаете

PUT http://server/user/5

и сервер создает объект, но nHibernate изменяет идентификатор, затем возвращает код состояния HTTP 301 - Moved permanently и помещает новый URI в заголовок Location.

Клиент должен обнаружить 301 и обновить все сохраненные URL со старым Id.

Просто предупреждение, семантика PUT на самом деле не создает и обновляет, а заменяет. Поэтому, если вы отправляете представление, содержащее только фамилию и имя, то если вы делаете что-то по книге, тогда вся другая ранее сохраненная информация об этом пользователе теряется.

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