#c# #mysql #nhibernate #nhibernate-mapping
#c# #mysql #nhibernate #nhibernate-сопоставление
Вопрос:
У меня есть класс со свойством:
virtual public string Data { get; set; }
example.hbm.xml привязывает это к:
<property name="Data" type="string" column="data" ></property>
Таблица в MySQL создается с:
CREATE TABLE `xxx` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=binary;
Я могу успешно выполнить запись в базу данных, и я вижу, что текст в столбце написан правильно.
Когда я пытаюсь прочитать записи из этой таблицы, значением свойства ‘Data’ является ‘System.Байт []’. Опять же, это значение этого свойства. Его тип ‘System.Строка’.
Что делать? Заранее спасибо за любые подсказки.
Я тоже пробовал charset = UTF8.
Я также попробовал type=»StringClob» в файле сопоставления.
Спасибо Tymek
Ответ №1:
Вероятно, вам нужно прочитать и записать это как byte[] . Таким образом, ваше определение свойства будет выглядеть следующим образом:
public virtual byte[] Data { get; set; }
В дополнение к этому изменению вам нужно будет изменить тип в вашем сопоставлении. Я не уверен, какой тип. Я думаю, что это может быть большой двоичный объект.
Вы можете легко преобразовать эти данные в строку, если вам нужно.
Ответ №2:
Я не эксперт по MySQL, но вы, вероятно, хотите, чтобы тип столбца был text
вместо blob
.
С этим type="StringClob"
должно сработать
Комментарии:
1. Вы полностью правы, но поскольку схема БД уже создана, я отмечу «прочитать это как byte[]» как лучший ответ.
2. @Tymek: это нормально. Имейте в виду, что вам придется использовать кодировку, если вы хотите прочитать ее как текст.