我在这里和网上的其他地方查看了所有答案,但似乎没有任何效果。 我有一个表(sql server 2014)与varbinary(max)数据类型,名为" Image" 我使用的是NHibernate版本3.3.1.4000,它有一些关于varbinary问题的修复。
这是我目前的hibernate映射:
<property name="Image" type="BinaryBlob">
<column name="Image" sql-type="varbinary(2147483647)" length="2147483647"/>
</property>
我也尝试过以下变化:
<property name="Image" type="BinaryBlob"/>
<property name="Image" length="2147483647"/>
这是我的(c#class)属性:
public virtual byte[] Image { get; set; }
我得到了熟悉的错误:
---> System.Data.SqlClient.SqlException: String or binary data would be truncated.
我有一种感觉,答案是正确地盯着我,但我无法看到它。 任何帮助将不胜感激。
答案 0 :(得分:5)
你已经在任何代码或配置中的某个地方做过。我使用NH 3.3和代码映射,并且它没有问题地映射到VARBINARY(MAX)。
这是我的属性定义
Property(x => x.Photo, map =>
{
map.Type(NHibernateUtil.BinaryBlob);
map.Length(Int32.MaxValue);
});
这是我的SessionFactory配置
Configure.DataBaseIntegration(db =>
{
db.Dialect<MsSql2008Dialect>();
db.Driver<SqlClientDriver>();
db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
db.IsolationLevel = IsolationLevel.ReadCommitted;
db.ConnectionStringName = System.Environment.MachineName;
db.BatchSize = 20;
db.Timeout = 10;
db.HqlToSqlSubstitutions = "true 1, false 0, yes 'Y', no 'N'";
});
请注意,我指定了驱动程序和方言。 MsSql2005Dialect之前不支持VARBINARY(MAX)。你可以在这里看到
https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Dialect/MsSql2005Dialect.cs