2009-03-16 10 views
1

Comment simplement permettre à MySQL d'assigner une clé primaire à un objet inséré avec nhibernate? Il semble que je voudrais définir le générateur comme un type "identité", mais la documentation indique que l'utilisation de ce ".. demande [s] deux requêtes SQL pour insérer un nouvel objet." Pourquoi ferait-il ça? Existe-t-il un moyen d'obtenir ce fonctionnement comme une instruction SQL standard?Laisser la base de données choisir la clé primaire dans nhibernate

Répondre

2

La raison pour laquelle il nécessite deux requêtes est que, avec une identité, la valeur de la colonne n'est pas définie tant que la ligne n'est pas insérée. Par conséquent, il nécessite un select after insert pour obtenir la valeur de la colonne pour l'objet inséré. C'est assez standard et je ne laisserais pas ça m'empêcher d'utiliser des clés autogénérées comme clé primaire. L'autre option consiste à pré-générer la clé - dire un GUID pour le nouvel objet avant de le persister dans la base de données. Pour la plupart, je ne vois pas vraiment d'avantage à cela à moins qu'il y ait d'autres circonstances atténuantes, comme devoir fusionner des données à partir de bases de données séparées où des clés autogénérées pourraient entrer en collision.

2

Il y a un avantage évident: laisser NHibernate utiliser Guids ou Hilo car le générateur d'identifiant activera une fonction extrêmement cool dans NHibernate: le batching. Configurez simplement NHibernate pour utiliser le traitement par lots (par exemple, disons 1000 instructions), et vos insertions seront soudainement extrêmement rapides.

Fabio a un article sur les différents générateurs disponibles here - lecture extrêmement utile si vous utilisez NHibernate (ou si vous connaissez quelqu'un qui pense que NHibernate fonctionne mal).

Questions connexes