NHibernate: чтение поля большого двоичного объекта mysql — значение, возвращаемое как «System.Байт []»

#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: это нормально. Имейте в виду, что вам придется использовать кодировку, если вы хотите прочитать ее как текст.