/ / Używanie kolumny Guid jako Id w NHibernate powoduje wyjątek w formacie przy korzystaniu z MySQL - mysql, nhibernate, guid

Używanie kolumny Guid jako Id w NHibernate powoduje wyjątek w formacie przy korzystaniu z MySQL - mysql, nhibernate, guid

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 treść wydaje się być binarna.

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

Odpowiedzi:

7 dla odpowiedzi № 1

Dokumentacja MySql Connector głosi, że od wersji 5.2 złącza .NET traktują identyfikatory GUID jako BINARY (16) nie VARCHAR (40).

Ponieważ obecny dialekt MySQL w nhibernate nie jest aktualizowany, aby odzwierciedlić tę zmianę (tak właściwie problem jest przygotowany) musisz ręcznie przekonwertować te pola do BINARY (16) po nhibernate wygenerować schemat.


5 dla odpowiedzi nr 2

Kolejną aktualizacją jest to, że najnowsze złącza używają Char (36)

Ta opcja została wprowadzona w Connector / NET 6.1.1. Reprezentacja typu GUID backendu została zmieniona z BINARY (16) na CHAR (36). Zrobiono to, aby umożliwić programistom wykorzystanie funkcji serwera UUID () do zapełnienia tabeli identyfikatorów 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, aby użyć identyfikatora GUID typu danych BINARY (16).