2013-03-07 1 views
2

У меня проблемы с сохранением очень длинных строк в базе данных с помощью NHibernate. Строки усекаются до 43 680 символов. Строка представляет собой очень длинный пакет XML, который отличается по размеру, но иногда очень длинный.NHibernate усекает длинные строки при сохранении

Тип данных базы данных - nvarchar(max), поэтому ограничений нет.

Может кто-нибудь помочь мне понять, почему NHibernate усекает это, и как я могу это предотвратить?

Вот мое отображение:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    assembly="Application.DataObjects" 
    namespace="Company.Application.DataObjects.Transaction.Domain"> 

    <class name="TransactionDO" table="Transactions"> 
    <id name="TransactionID"> 
    </id> 
    <property name="Created" /> 
    <property name="LongXML" type="StringClob"> 
     <column name="LongXML" sql-type="nvarchar(max)"/> 
    </property> 
    <property name="ProcessConstructor" /> 
    <property name="VeryLongXML" type="StringClob"> 
     <column name="VeryLongXML" sql-type="nvarchar(max)" /> 
    </property> 
    </class> 
</hibernate-mapping> 
+0

Какая версия NHibernate вы используете? Можно попробовать указать максимальную длину для тестирования, чтобы увидеть, работает ли: ' ' nvarchar (max), в этом случае длина данные могут быть 2^31-1 байта –

+0

Извините, я забыл добавить это. Версия 3.2. Я попытался указать длину строки 100000. и он все равно возвращает одинаковое количество символов. – TPaul1981

+0

Как вы проверяете, что строки ограничены 43 680 символами? В «Sql Server Management Studio 2008» есть известная ошибка, которая показывает только строки этого предела в сетке, обходные решения известны. –

ответ

4

Как было отмечено в комментариях о которых идет речь в ФП, вопрос был в SSMS отображения данных.

Существует известная ошибка в Sql Server Management Studio 2008that you cannot paste more than 43679 characters from a column in Grid Mode.

Options (Query Results/SQL Server/Results to Grid Page) version SQL Server 2008 R2

Максимальные символы, извлекаемые в режиме сетки данных, не являющихся XML должны быть 65535 символов.

Severals способы были обсуждены для отображения XML через SSMS:

  • комплект Максимальное количество символов загружаемых в XML данных и установить ограничение на Неограниченный.

    Попробуйте заливку результата XML, т.е. cast(COLUMN_NAME as XML)

  • Рассекая выход колонки на несколько строк
  • колонки копипаст в другую программу
  • Третьей партии оснастка (ssmsboost)

В качестве альтернативы , эти обсуждения могут быть полезными:

https://stackoverflow.com/a/5508193/368552, https://stackoverflow.com/a/2760023/368552

0

Вы можете добавить свойство length и установить его на максимальную длину ("2147483647") для обеспечения полного хранения строки xml; например

<property name="VeryLongXML" type="StringClob" length="2147483647"> 
Смежные вопросы