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
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.
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).
- 1. NHibernate avec la clé primaire et les relations
- 2. Violation de la clé primaire dans la base de données restaurée
- 3. Clé primaire de la ligne insérée jdbc?
- 4. Préserver les valeurs de clé primaire dans la base de données
- 5. Pourrions-nous avoir un nom personnalisé de la colonne de clé primaire dans Fluent NHibernate?
- 6. Récupère la clé primaire d'une nouvelle entrée
- 7. Sql Type de données pour la clé primaire - SQL Server?
- 8. Clé primaire de la base de données -> Un champ d'identité ET un champ de nom?
- 9. clé primaire entière pour la réplication
- 10. Obtenir la valeur de la clé primaire à partir de la base de données SQLite en utilisant des données de base dans Iphone
- 11. Ignorer les conflits de clé primaire avec la copie SQL
- 12. SqlBulkCopy dans la table avec la clé primaire composite
- 13. Obtenir le nom de la clé primaire de la table
- 14. NHibernate n'insérant pas de parent dans la base de données
- 15. NHibernate: Requête par exemple sur la clé primaire produit "WHERE (1 = 1)"
- 16. Fluent Nhibernate sur la base de données existante dans Oracle
- 17. NHibernate mappage des données XML à la base de données
- 18. Trouver GUID dans la base de données
- 19. Fluid nHibernate: Comment mapper 2 tables sans clé primaire
- 20. Trouver la clé primaire créée par Hibernate JPA
- 21. Subsonic erreur clé primaire
- 22. Dans la base de données de mémoire
- 23. Ajout d'une clé primaire à une grande table sur un serveur de base de données partagé
- 24. Indépendance de la base de données avec NHibernate?
- 25. violation de clé primaire si sensible à la casse
- 26. Clé primaire composée
- 27. Fluid NHibernate Automap Joined Sous-classe Définition de la clé
- 28. Comment laisser le noyau choisir un numéro de port dans la gamme (1024,5000) dans la programmation socket TCP
- 29. Effet de clé primaire sur les performances dans SQLite
- 30. Génération de la clé primaire avec un index non nul (flux de données SSIS)