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 varbinary(max)字节数组映射

你必须在代码或配置的某个地方这样做。我使用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)