2013-03-07 85 views
2

我遇到問題,使用NHibernate將非常長的字符串保存到數據庫。字符串被截斷爲43,680個字符。該字符串是一個非常長的包,其大小各不相同,但有時很長。保存時,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字節 – 2013-03-07 18:31:01

+0

對不起,我忘了補充一點。版本是3.2。我試圖指定100000的字符串長度,並且它仍然返回相同數量的字符。 – TPaul1981 2013-03-07 19:48:11

+0

你如何驗證字符串限制爲43,680個字符? 「Sql Server Management Studio 2008」中存在一個已知錯誤,該錯誤只顯示網格中此限制的字符串,已知的解決方法。 – 2013-03-07 20:42:36

回答

4

正如在OP的問題的評論中指出,這個問題在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/368552https://stackoverflow.com/a/2760023/368552

0

您可以添加長度屬性並將其設置爲最大長度(「2147483647」)以確保完整存儲xml字符串;像

<property name="VeryLongXML" type="StringClob" length="2147483647">