2010-10-23 5 views
3

Selon la philosophie REST, une opération PUT devrait créer une entité si elle n'existe pas, ou mettre à jour si c'est le cas. Ainsi, par exemple, si un client fait cette opération:Comment créer une entité via un PUT RESTful avec NHibernate?

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

j'attendre à ce qu'un utilisateur avec un identifiant de 5 être créé ou mis à jour.

Le cas mise à jour est facile avec NHibernate; récupérez simplement l'utilisateur et mettez à jour le prénom et le nom.

Cependant, comment puis-je créer un utilisateur avec un ID de 5? Par défaut, NHibernate gère tous les ID d'entité. Même si vous définissez l'ID vous-même, NHibernate l'ignorera et le remplacera par le sien. Si je passe à l'utilisation des ID attribués, alors je peux assigner un nouvel utilisateur avec un ID de 5, mais alors je perdrais beaucoup de fonctionnalités de NHibernate. Donc, en d'autres termes, y a-t-il un moyen de configurer NHibernate pour utiliser un ID généré s'il n'est pas fourni, et d'utiliser l'ID de l'utilisateur s'il est fourni? Si non, comment contourner ce problème de création de PUT avec NHibernate?

+0

Intéressant, nous avons le même problème (bien préoccupé) avec EntityFramework. C'est presque comme si vous deviez programmer 'IDENTITY_INSERT'. Intéressé de voir si vous trouvez une réponse. +1 – RPM1984

+1

Bonne question. Juste par curiosité, d'où vient l'ID de 5 si l'utilisateur n'a pas encore été créé? Il semble que vous disiez que vous voulez que votre utilisateur possède cet ID, mais vous ne savez pas quels identifiants sont encore disponibles. – DaveDev

+0

duplicata possible de [Comment puis-je obtenir NHibernate pour enregistrer une entité si je lui assigne un ID, mais en générer un autre?] (Http://stackoverflow.com/questions/3886877/how-do-i-get-nhibernate- pour-enregistrer-une-entité-si-je-attribuer-un-un-id-mais-générer-un) –

Répondre

0

Si vous faites un

PUT http://server/user/5 

et le serveur crée l'objet, mais NHibernate change les id puis, retourner le code d'état HTTP 301 - Moved permanently et mettre la nouvelle URI dans l'en-tête d'emplacement.

Le client doit détecter le 301 et mettre à jour les URL stockées avec l'ancien ID. Juste un mot d'avertissement, la sémantique PUT n'est pas vraiment Créer et Mettre à jour, ils sont remplacés. Donc, si vous envoyez une représentation qui contient juste le nom et le prénom, alors si vous faites les choses par le livre, alors toutes les autres informations précédemment stockées sur cet utilisateur sont perdues.

Questions connexes