NHibernate:将VARBINARY存储到MAX

时间:2012-04-14 17:00:34

标签: sql-server-2008 nhibernate blob serializable varbinary

我使用以下映射将Serializable对象存储到SQL Server 2008:

<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(不流利)。

1 个答案:

答案 0 :(得分:4)

根据nHibernate文档,“length”不是&lt; property&gt;的属性/属性。但应该在&lt; column&gt;。

中使用

此部分显示“长度”不是&lt; property&gt;的一部分。 : http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

此部分显示“长度”是&lt; column&gt;的一部分。 : http://nhibernate.info/doc/nh/en/index.html#toolsetguide-s1-2

最后一节(20.1和表20.1摘要)显示“sql-type”也是&lt; column&gt;的一部分。所以尝试以下其中一种变体:

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