2009-06-23 6 views
5

Lorsque je définis l'entité/mappage NHibernate pour utiliser Guid comme colonne d'identité, je reçois une exception. La colonne Guid est générée en tant que varchar (40), mais le contenu semble être binaire.L'utilisation de Guid comme colonne Id dans NHibernate provoque une exception de format lors de l'utilisation de MySQL

Y at-il une solution à cela? Pour l'instant, je n'utilise que du simple ol 'int, mais il serait bon de le savoir pour de futurs projets! :)

+0

Quelle est l'exception? Avez-vous créé la colonne en tant que varchar (40) ou NHibernate a-t-il généré le schéma? –

+0

NHibernate l'a généré. Je n'ai pas l'exception disponible pour le moment, mais c'était une exception concernant le format. – l3dx

Répondre

7

MySql documentation Connector indique que la version 5.2 du connecteur .NET ils traitent GUID comme BINARY (16) pas VARCHAR (40).

Depuis le dialecte actuel MySQL NHibernate n'a pas mis à jour pour refléter ce changement (en fait an issue est préparé) vous devez convertir manuellement ces champs BINARY (16) après NHibernate générer le schéma.

+0

Je reçois la même chose ces derniers jours. c'est un vrai sauveur de vie. –

5

Une autre mise à jour est ce que les derniers utilisent des connecteurs Char (36)

Cette option a été introduite dans le connecteur/NET 6.1.1. La représentation backend 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 remplir 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 du type de données BINARY (16).