nhibernate varbinary(max)字节数组映射

时间:2014-07-29 15:40:46

标签: c# xml nhibernate mapping sql-server-2014

我在这里和网上的其他地方查看了所有答案,但似乎没有任何效果。 我有一个表(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.

我有一种感觉,答案是正确地盯着我,但我无法看到它。 任何帮助将不胜感激。

1 个答案:

答案 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