3

を使用して非常に長い文字列をデータベースに保存する際に問題が発生していますNHibernate。文字列は 43,680 文字に切り詰められています。文字列は非常に長い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>
4

2 に答える 2

4

OPの質問のコメントに記載されているように、問題はSSMSデータの表示にありました。

グリッド モードでは、列から 43679 文字を超える文字を貼り付けることができないという既知のバグがあります。Sql Server Management Studio 2008

オプション (Query Results/SQL Server/Results to Grid Page) バージョン SQL Server 2008 R2

非 XML データのグリッド モードで取得される最大文字数は 65535 文字です。

XMLthroughを表示する方法がいくつか議論されていますSSMS

  • Maximum Characters Retrieved をXMLdata に設定し、制限をUnlimitedに設定します。

    XML結果をにキャストしてみてください。cast(COLUMN_NAME as XML)

  • 列の出力を複数の行に分割する
  • 列を別のプログラムにコピーして貼り付けます
  • サードパーティのツール (ssmsboost)

または、次の議論が役立つ場合があります。

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

于 2013-03-08T20:02:37.460 に答える
1

length プロパティを追加して最大長 ("2147483647") に設定すると、xml 文字列が完全に保存されます。お気に入り

<property name="VeryLongXML" type="StringClob" length="2147483647">
于 2014-11-13T12:52:55.597 に答える