2009-06-23 9 views
5

Quando definisco l'entità/mappatura NHibernate per utilizzare Guid come colonna Identity, ricevo un'eccezione. La colonna Guid è generata come varchar (40), ma il contenuto sembra essere binario.L'utilizzo di Guid come colonna Id in NHibernate causa un'eccezione di formato quando si utilizza MySQL

C'è una soluzione a questo? Per ora sto solo usando plain int ', ma sarebbe bello sapere per i progetti futuri! :)

+0

Qual è l'eccezione? Hai creato la colonna come varchar (40) o NHibernate ha generato lo schema? –

+0

NHibernate lo ha generato. Al momento non ho l'eccezione disponibile, ma era un'eccezione riguardo al formato. – l3dx

risposta

7

documentazione MySQL Connector afferma che a partire dalla versione 5.2 del connettore NET trattano GUID come BINARIO (16) non VARCHAR (40).

Dal corrente dialetto MySQL in NHibernate non aggiornato per riflettere questo cambiamento (in realtà è preparato an issue) è necessario convertire manualmente questi campi per BINARIO (16) dopo NHibernate generare lo schema.

+0

Ho avuto la stessa cosa negli ultimi giorni. questo è un vero risparmiatore di vita. –

5

Un altro aggiornamento per questo è che le ultime connettori utilizzano Char (36)

Questa opzione è stata introdotta in Connector/NET 6.1.1. La rappresentazione di backend di un tipo GUID è stata modificata da BINARY (16) a CHAR (36). Ciò è stato fatto per consentire agli sviluppatori di utilizzare la funzione server UUID() per popolare una tabella GUID: UUID() genera una stringa di 36 caratteri. Gli sviluppatori di applicazioni precedenti possono aggiungere "Old Guids = true" alla stringa di connessione per utilizzare un GUID del tipo di dati BINARY (16).

Problemi correlati