Отображение длинной текстовой строки в Oracle и NHibernate - PullRequest
5 голосов
/ 16 августа 2011

Используя NHibernate 3.1 с базами данных SQL Server и Oracle, нам нужно хранить текстовую строку длиной более 4000 символов. Текст на самом деле XML, но это не важно - мы просто хотим рассматривать его как необработанный текст. С SQL Server это легко. Мы объявляем столбец как NVARCHAR (MAX) и отображаем его таким образом:

<property name="MyLongTextValue" length="100000"/>

Использование свойства length указывает NHibernate ожидать, что строка может быть длиннее 4000 символов.

Насколько я понимаю, я не могу понять, как заставить это работать в Oracle 11g. Я попытался объявить столбец как XMLTYPE и LONG, но безуспешно. В первом случае мы получаем ORA-01461: может связывать значение LONG только для вставки в столбец LONG при попытке вставить строку. Во втором случае данные вставляются правильно, но при запросе возвращаются в виде пустой строки.

Кто-нибудь знает, как заставить это работать? Ответ должен быть совместим как с SQL Server, так и с Oracle. Я бы предпочел не писать собственные расширения, такие как пользовательские типы и подклассы драйверов. Благодаря.

Ответы [ 3 ]

6 голосов
/ 16 августа 2011

Вы должны использовать что-то вроде этого

<property name="MyLongTextValue" length="100000" type="StringClob" 
not-null="false"/>

Это должно работать с типом Oracle CLOB и типом SqlServer NTEXT.

Убедитесь, что свойство вашей модели имеет значение null

public virtual string MyLongTextValue {get;set;}

Вы всегда должны использовать Oracle.DataAccess при работе с объектами CLOB

2 голосов
/ 23 сентября 2015

Для кого это может заинтересовать, я решил свою проблему, выполнив шаг 3 из этой статьи :

3. Использование правильных атрибутов сопоставления: type="AnsiString"

Обычно мы можем использовать type="String" по умолчанию для CLOB / NCLOB. Попробуйте использовать> type="AnsiString", если два шага выше не работают.

<property name="SoNhaDuongPho" column="SO_NHA_DUONG_PHO" type="AnsiString"/>

В моем случае я установил его с помощью FluentNHibernate:

.CustomType("AnsiString")
0 голосов
/ 16 августа 2011

Вас может заинтересовать эта статья .

<property column="`LARGE_STRING`" name="LargeString" type="StringClob" sql-type="NCLOB" />
...