2009-06-23 10 views
5

Kiedy definiuję encję NHibernate/mapowanie, aby użyć Guid jako kolumny tożsamości, otrzymuję wyjątek. Kolumna Guid jest generowana jako varchar (40), ale zawartość wydaje się być binarna.Używanie kolumny Guid jako Id w NHibernate powoduje wyjątek formatowania podczas używania MySQL

Czy istnieje rozwiązanie tego problemu? Na razie używam zwykłego, int, ale dobrze byłoby wiedzieć o przyszłych projektach! :)

+0

Co to jest wyjątek? Czy utworzyłeś kolumnę jako varchar (40), czy NHibernate wygenerował schemat? –

+0

Wygenerowano NHibernate. Nie mam obecnie dostępnego wyjątku, ale był to wyjątek dotyczący formatu. – l3dx

Odpowiedz

7

dokumentacji MySQL Connector stwierdza, że ​​od wersji 5.2 złącza NET traktują GUID jako BINARY (16) nie VARCHAR (40).

Od obecnego dialektu MySQL w NHibernate nie zaktualizowane, aby odzwierciedlić tę zmianę (faktycznie an issue jest przygotowane) trzeba ręcznie przekonwertować te pól binarnych (16) po NHibernate generowania schematu.

+0

Otrzymałem to samo w ciągu ostatnich kilku dni. to jest prawdziwy ratownik. –

5

Kolejna aktualizacja jest to, że najnowsze złącza użyć Char (36)

Ta opcja została wprowadzona w Connector/NET 6.1.1. Reprezentacja backendu typu GUID została zmieniona z BINARY (16) na CHAR (36). Zrobiono to, aby umożliwić programistom wykorzystanie funkcji serwera UUID() do zapełnienia tabeli GUID - UUID() generuje 36-znakowy ciąg znaków. Programiści starszych aplikacji mogą dodać ciąg "Old Guids = true" do ciągu połączenia w celu użycia identyfikatora GUID typu danych BINARY (16).

Powiązane problemy