二进位Blob截断为8000个字节 - 的SQL Server 2008 / VARBINARY(最

2019-05-12 00:46发布

我已经从功能NHibernate 1.0升级与NHibernate 2.1预先与NHibernate 3.0 GA版本1.x和击中我认为是一个倒退,但我想听到的话,那确实是这样的。

我使用SQL Server Express 2008年和2008年MSSQL方言,有型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>`

但是不管我做什么二进制斑被截断为8000个字节时,与当前FNH和NH版本序列化。 这并没有使用到与以前版本的情况。

为什么这个观念正在发生以及如何修复/解决方法呢?

Answer 1:

我也曾经遇到过类似的问题,并多次实验后,我发现,使用NHibernate生成我的架构文件时生成的列类型总是长度8000。

设置CustomSqlType设置为上述建议并没有区别VARBINARY(最大值),然而,这项工作在我身边FluentMapping似乎这样的伎俩:

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

病程的长短是任意金额,但我认为它应该被设置为东西小于int.Max。 我是新来NHibernate的,所以我还在盘算的事情了,但我很想知道,如果这可以帮助你。



Answer 2:

在3.0.0GA,以下映射,似乎这样的伎俩:

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


Answer 3:

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



Answer 4:

地图(X => x.Image)。长度(100000).Not.Nullable();

添加“长度(MAXVALUE)”如上,它会工作:)



Answer 5:

您是否尝试过这个?

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


文章来源: Binary Blob truncated to 8000 bytes - SQL Server 2008 / varbinary(max)