NHibernate在保存时会截断长字符串

时间:2013-03-07 18:20:57

标签: .net sql-server-2008 nhibernate ssms

我在使用NHibernate将非常长的字符串保存到数据库时遇到问题。字符串被截断为43,480个字符。该字符串是一个非常长的XML数据包,大小不一,但有时很长。

数据库数据类型为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>

2 个答案:

答案 0 :(得分:4)

如OP的问题中的评论所述,问题出在SSMS显示数据。

Sql Server Management Studio 2008 that 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个字符。

已经讨论了几种方法来显示XMLSSMS

  • 将检索到的最大字符设置为XML数据,并将限制设置为无限

    尝试将结果投射到XML,即cast(COLUMN_NAME as XML)

  • 将列的输出分解为多行
  • 将列复制粘贴到另一个程序
  • 第三方工具(ssmsboost)

或者,这些讨论可能有用:

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

答案 1 :(得分:1)

您可以添加length属性并将其设置为max length(“2147483647”)以确保完全存储xml字符串;像

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