2012-04-14 17 views
4

に私は、SQL Server 2008に直列化オブジェクトを格納するために次のマッピングを使用しています:NHibernateは:ストアVARBINARY MAX

<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> 

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

答えて

4

nHibernateのドキュメントによると、「長さ」は<プロパティ>の属性/プロパティではなく、<の列>に使用する必要があります。 http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

このセクションでは、「長さ」は<カラム>の一部であることを示している:

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

その最後部(20.1と表20.1のまとめ)は、「SQL型」も<列>の一部であることを示していますので、これらのバリエーションのいずれかを試してみてください:

<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)

+0

は...非常にそれが働いた –

+0

いつでも...嬉しいありがとう:) –

関連する問題