Nhibernate 二进制Blob被截断为8000字节-SQL Server 2008/varbinary(最大值)

Nhibernate 二进制Blob被截断为8000字节-SQL Server 2008/varbinary(最大值),nhibernate,fluent-nhibernate,sql-server-2008-express,Nhibernate,Fluent Nhibernate,Sql Server 2008 Express,我已经从Fluent Nhibernate 1.0升级到Nhibernate 2.1,升级到pre- 使用NHibernate 3.0 GA发布1.x版,我认为这是一种倒退,但我想听听是否确实如此 我正在使用SQL Server Express 2008和MSSQL 2008方言,并且有一个 类型System.Drawing.Image的Image属性,我已将其映射为 这: 表中的Image列的类型为varbinary(MAX) 为属性生成的hbm为: <property name="Im

我已经从Fluent Nhibernate 1.0升级到Nhibernate 2.1,升级到pre- 使用NHibernate 3.0 GA发布1.x版,我认为这是一种倒退,但我想听听是否确实如此

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

表中的
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版本序列化时。那没用 与以前的版本相同

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

您尝试过这种方法吗

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

这是一种倒退。我在3.0.0GA中提出了一个bug并在

提供了补丁,下面的映射似乎可以实现这一点:

        <property name="Data" type="Serializable" length="2147483647" />
Map(x => x.LogoBytes).CustomType("BinaryBlob").Length(1048576).Nullable();  

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

如上所述,将CustomSqlType设置为Varbinary(max)没有任何区别,但是,我的FluentMapping中的这项工作似乎起到了作用:

        <property name="Data" type="Serializable" length="2147483647" />
Map(x => x.LogoBytes).CustomType("BinaryBlob").Length(1048576).Nullable();  
当然,长度是任意的,但我认为应该设置为小于int.Max的值。我是Nhibernate的新手,所以我还在想办法,但我很想知道这是否对你有帮助

Map(x=>x.Image).Length(100000).Not.Nullable()


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

是的,我已经尝试过了,没有任何区别。我已经和流利的NHibernate的人核实过了,这不是他们这边的倒退,所以我提出了一个NHibernate的问题;但是,我只是使用int.MaxValue作为长度,以避免施加任何低限制。从nhibernate 3.2.0.4000和fluentnhibernate 1.3.0.717开始,我仍然必须使用它来超过8000限制。解决方案对我也有效。在使用NH3.2.400和代码映射时,我使用了以下内容:map.Property(x=>x.Image,status=>status.Column(c=>{c.SqlType(“VARBINARY(MAX)”;c.Length(int.MaxValue);});我发现简单地将长度设置为
int.MaxValue
就足以解决此问题。指示他们不会解决此问题,但您需要手动指定长度,因此这是解决此问题的正确方法。我对NHibernate 3.1.0.4000也有同样的问题。我做错了什么吗?我不知道-我使用了修补过的3.0 an由于3.0上的其他DEP,d现在无法更新到3.1进行测试。最简单的方法是从错误报告中获取我的测试用例,用3.1替换3.0,看看它是否仍然抛出错误。如果是这样,我们应该重新打开缺陷,暂时您可以使用自定义用户类型进行映像,从而强制数据的大小。经过更多测试,我发现NH3.1.0不是错误我使用的是另一个版本的损坏数据(保存为8000字节),然后我很难找到错误的原因。现在没事了。谢谢!