5

次のマッピングを使用して、SerializableオブジェクトをSQLServer2008に格納しています。

<class name="EMSApplication.Data.Domain.Configuration, EMSApplication.Data" table="ems_Configurations" proxy="EMSApplication.Data.Domain.IConfiguration, EMSApplication.Data" lazy="true">
  <id name="Id" type="System.Int32">
    <column name="Id" not-null="true"/>
    <generator class="native"/>
  </id>
  <property name="Settings" type="Serializable">
    <column name="Settings" not-null="true"/>
  </property>   
</class>

データベースの列型のvarbinary(8000)を生成しています。varbinary(max)を使用するにはどうすればよいですか?

私が使用する場合:

<property name="Settings" type="Serializable" length="2147483647">
    <column name="Settings" not-null="true"/>
</property> 

また、8000に切り捨てられます。私はNHibernate3.2(流暢ではありません)を使用しています。

4

1 に答える 1

4

nHibernate のドキュメントによると、「長さ」は <property> の属性/プロパティではなく、<column> で使用する必要があります。

このセクションは、「長さ」が <property> の一部ではないことを示しています: http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

このセクションは、「長さ」が <column> の一部であることを示しています: http://nhibernate.info/doc/nh/en/index.html#toolsetguide-s1-2

最後のセクション (20.1 および表 20.1 の概要) は、"sql-type" も <column> の一部であることを示しているため、次のバリエーションのいずれかを試してください。

<property name="Settings" type="Serializable">
    <column name="Settings" not-null="true" length="2147483647"/>
</property> 

また

<property name="Settings" type="Serializable">
    <column name="Settings" not-null="true" sql-type="varbinary(max)"/>
</property> 

編集:
この質問は次の重複のようです:
How do I get fluent nhibernate to create a varbinary(max) field in sql server

しかし、その情報はほぼ 3 年前のものであり、nHibernate の新しいバージョンではこれが修正されている可能性があります (これをテストする方法はありません)。

次のページも同じ問題のようで、かなり最近のものです:
Binary Blob truncated to 8000 bytes - SQL Server 2008 / varbinary(max)

于 2012-04-14T18:33:08.210 に答える