Использование столбца Guid as Id в NHibernate вызывает исключение формата при использовании MySQL

Когда я определяю сущность/отображение NHibernate для использования Guid в качестве столбца идентификации, я получаю исключение. Столбец Guid создается как varchar(40), но содержимое кажется двоичным.

Есть ли этому решение? На данный момент я просто использую обычный int, но было бы неплохо знать для будущих проектов! :)


person l3dx    schedule 23.06.2009    source источник
comment
Что является исключением? Вы создали столбец как varchar (40) или NHibernate сгенерировал схему?   -  person Jamie Ide    schedule 24.06.2009
comment
NHibernate сгенерировал его. У меня нет доступного исключения прямо сейчас, но это было исключение относительно формата.   -  person l3dx    schedule 29.06.2009


Ответы (2)


В документации по соединителю MySql указано, что начиная с версии 5.2 соединителя .NET они обрабатывают идентификаторы GUID как BINARY(16), а не как VARCHAR(40).

Поскольку текущий диалект MySQL в nhibernate не обновлен, чтобы отразить это изменение, (фактически проблема готово) вам нужно вручную преобразовать эти поля в BINARY(16) после того, как nhibernate сгенерирует схему.

person Ahmet Recep Navruz    schedule 30.06.2009
comment
Я получаю то же самое в последние несколько дней. это реальное спасение. - person Nathan Fisher; 18.08.2009

Еще одно обновление заключается в том, что последние коннекторы используют Char(36)

Этот параметр был представлен в Connector/NET 6.1.1. Внутреннее представление типа GUID было изменено с BINARY(16) на CHAR(36). Это было сделано для того, чтобы разработчики могли использовать серверную функцию UUID() для заполнения таблицы GUID — UUID() генерирует строку из 36 символов. Разработчики старых приложений могут добавить «Old Guids=true» в строку подключения, чтобы использовать GUID типа данных BINARY(16).

person cdmdotnet    schedule 26.01.2010