二进制Blob截断为8000字节 - SQL Server 2008 / varbinary(max)

时间:2011-01-03 11:52:09

标签: nhibernate fluent-nhibernate sql-server-2008-express

我已经使用Nhibernate 2.1从Fluent Nhibernate 1.0升级到 使用NHibernate 3.0 GA发布1.x并且已经达到我认为的回归,但我想听听是否确实如此。

我正在使用SQL Server Express 2008和MSSQL 2008方言并且有一个 System.Drawing.Image类型的图像属性,我已将其映射为 这样:

Map (food => food.Image)
 .Length (int.MaxValue)
 .Nullable ();

表格中的Image列的类型为varbinary(MAX)

属性的生成的hbm是:

<property name="Image" type="System.Drawing.Image, System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
   <column name="Image" length="2147483647" not-null="false" />
</property>`

但无论我做什么,二进制blob都被截断为8000字节 当使用当前的FNH和NH版本序列化时。那没用过 与先前版本的情况一样。

为什么会发生这种情况以及如何解决/解决它的想法?

5 个答案:

答案 0 :(得分:22)

我也遇到了类似的问题,经过多次实验后,我注意到当使用Nhibernate生成我的模式到文件时,生成的列类型总是长度为8000。

如上所述将设置CustomSqlType设置为Varbinary(max)没有区别,但是,在我的FluentMapping中解决此问题似乎可以解决问题:

Map(x => x.LogoBytes).CustomType("BinaryBlob").Length(1048576).Nullable();  

当然长度是任意数量,但我认为它应该设置为小于int.Max。我是Nhibernate的新手,所以我还在想办法,但我很想知道这是否对你有所帮助。

答案 1 :(得分:5)

在3.0.0GA中,以下映射似乎可以解决问题:

        <property name="Data" type="Serializable" length="2147483647" />

答案 2 :(得分:4)

这是回归。我提出了一个错误并在https://nhibernate.jira.com/browse/NH-2484

提供了补丁

答案 3 :(得分:1)

Map(x =&gt; x.Image).Length(100000).Not.Nullable();

如上所述添加'Length(MAXVALUE)',它将起作用:)

答案 4 :(得分:0)

你试过这个吗?

Map(x => x.Image).CustomSqlType("VARBINARY(MAX)");