我已经使用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版本序列化时。那没用过 与先前版本的情况一样。
为什么会发生这种情况以及如何解决/解决它的想法?
答案 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)");