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

Iva*_*tev 23 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类型的Image属性,我已将其映射为:

Map (food => food.Image)
 .Length (int.MaxValue)
 .Nullable ();
Run Code Online (Sandbox Code Playgroud)

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>`
Run Code Online (Sandbox Code Playgroud)

但是无论我做什么,当使用当前的FNH和NH版本序列化时,二进制blob被截断为8000字节.以前的版本不是这种情况.

想法为什么会这样,以及如何解决/解决它?

sbe*_*kur 22

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

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

Map(x => x.LogoBytes).CustomType("BinaryBlob").Length(1048576).Nullable();  
Run Code Online (Sandbox Code Playgroud)

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

  • 这为我纠正了它; 但是,我只是使用int.MaxValue作为长度,以免施加任何低限制. (4认同)
  • 我发现只需将长度设置为`int.MaxValue`即可解决此问题. (2认同)

Mic*_*per 5

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

        <property name="Data" type="Serializable" length="2147483647" />
Run Code Online (Sandbox Code Playgroud)


Iva*_*tev 4

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