2

Selon la philosophie REST, une requête PUT doit mettre à jour la ressource à une URL si elle existe et la créer si elle n'existe pas. En d'autres termes, si j'utilise l'URL suivante:Comment obtenir NHibernate pour enregistrer une entité si je lui assigne un identifiant, mais en générer un autre?

PUT http://server/item/5 

Si un Item existe avec un ID de 5, il sera mis à jour. Si un Item n'existe pas avec un ID 5, un nouveau Item sera créé avec un ID de 5.

Cependant, j'utilise NHibernate pour la persistance, et je cartographiés mes ID comme Identity. Cela signifie que quelle que soit la valeur que j'attribue à l'identifiant, NHibernate le remplacera par le sien lorsque j'enregistre un nouveau Item.

Comment obtenir NHibernate pour enregistrer un Item avec l'ID que je lui attribue, sans modifier le mappage d'ID à Assigned?

+0

vous avez tort sur l'hypothèse que l'identité mis en correspondance ids sont générés par NHibernate. pour SQL Server par exemple c'est un aller-retour supplémentaire – Jaguar

Répondre

2

Si vous utilisez Identity, le DB ne vous permettra pas d'entrer une valeur. Cela dit, si votre DB a une syntaxe spéciale pour permettre l'insertion avec des valeurs explicites dans les champs Identity, vous pouvez implémenter votre propre générateur, ce qui, je le garantis, sera sujet aux erreurs, difficile à déboguer et pas très utile. Mais c'est possible.

étude tout en https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate/Id et commencer à créer votre Frankenstein :-)

+1

Qu'en est-il du cas où le type de données est 'int' sur la base de données, mais NHibernate empêche l'utilisation de l'ID assigné manuellement? –

+0

Afficher le code (DB/mapping/usage) –