Nhibernate varbinary(max)字节数组映射
本文关键字:字节数 数组 映射 字节 varbinary max Nhibernate | 更新日期: 2023-09-27 18:15:32
我查看了这里和网上其他地方的所有答案,但似乎没有任何工作。我有一个表(sql server 2014)与varbinary(max)数据类型,名为"图像"我使用的是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#类)属性:
public virtual byte[] Image { get; set; }
我得到熟悉的错误:
---> System.Data.SqlClient.SqlException: String or binary data would be truncated.
我有一种感觉,答案就在我眼前,只是我看不见。
你必须在代码或配置的某个地方这样做。我使用NHibernate 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'";
});
注意,我指定了一个Driver和Dialect。在MsSql2005Dialect之前不支持VARBINARY(MAX)
。