L'utilisation de la colonne Guid as Id dans NHibernate provoque une exception de format lors de l'utilisation de MySQL
-
07-07-2019 - |
Question
Lorsque je définis l'entité / le mappage NHibernate pour utiliser Guid en tant que colonne d'identité, je reçois une exception. La colonne Guid est générée sous forme de varchar (40), mais le contenu semble être binaire.
Y at-il une solution à cela? Pour le moment, j'utilise simplement plain ol 'int, mais ce serait bien de le savoir pour des projets futurs! :)
La solution
La documentation du connecteur MySql indique que, à partir de la version 5.2 du connecteur .NET, ils traitent les GUID comme des BINARY (16) et non des VARCHAR (40) .
Etant donné que le dialecte MySQL actuel dans nhibernate n'est pas mis à jour pour refléter ce changement (en réalité, un numéro est préparé) vous devez les convertir manuellement champs à BINARY (16) après nhibernate générer le schéma.
Autres conseils
Une autre mise à jour est que les derniers connecteurs utilisent Char (36)
Cette option a été introduite dans Connector / NET 6.1.1. La représentation dorsale d'un type GUID a été modifiée de BINARY (16) à CHAR (36). Cela a été fait pour permettre aux développeurs d'utiliser la fonction serveur UUID () pour renseigner une table GUID - UUID () génère une chaîne de 36 caractères. Les développeurs d’applications plus anciennes peuvent ajouter «Old Guids = true» à la chaîne de connexion afin d’utiliser un GUID de type de données BINARY (16).