0

我在这里和网络上的其他地方查看了所有答案,但似乎没有任何效果。我有一个带有 varbinary(max) 数据类型的表(sql server 2014),名为“Image”,我使用的是 NHibernate 版本 3.3.1.4000,它对 varbinary 问题进行了一些修复。

这是我当前的休眠映射:

   <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.

我有一种感觉,答案正盯着我的脸,但我就是看不到。任何帮助将不胜感激。

4

1 回答 1

7

您必须在某处的代码或配置中的某处执行此操作。我正在使用 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'";
          });

请注意,我指定了驱动程序和方言。VARBINARY(MAX)MsSql2005Dialect之前不受支持。

于 2014-07-29T16:12:20.393 回答