nhibernate varbinary(max)字节数组映射

Rub*_*ren 0 c# xml mapping nhibernate 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>
Run Code Online (Sandbox Code Playgroud)

我也试过以下变化:

<property name="Image" type="BinaryBlob"/>

<property name="Image"  length="2147483647"/>
Run Code Online (Sandbox Code Playgroud)

这是我的(c#class)属性:

   public virtual byte[] Image { get; set; }
Run Code Online (Sandbox Code Playgroud)

我收到了熟悉的错误:

 ---> System.Data.SqlClient.SqlException: String or binary data would be truncated.
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ran 5

你可以在任何代码或配置的某个地方做这件事.我正在使用NH 3.3和代码映射,并且它没有问题地映射到VARBINARY(MAX).

这是我的属性定义

Property(x => x.Photo, map =>
{
    map.Type(NHibernateUtil.BinaryBlob);
    map.Length(Int32.MaxValue);
});
Run Code Online (Sandbox Code Playgroud)

这是我的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'";
          });
Run Code Online (Sandbox Code Playgroud)

请注意,我正在指定驱动程序和方言.MsSql2005Dialect之前不支持VARBINARY(MAX).你可以在这看到

https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Dialect/MsSql2005Dialect.cs