【问题标题】:nhibernate varbinary(max) byte array mappingnhibernate varbinary(max) 字节数组映射
【发布时间】:2014-09-21 01:33:51
【问题描述】:

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

我有一种感觉,答案就在我眼前,但我就是看不到。 任何帮助将不胜感激。

【问题讨论】:

  • 你用的是什么方言?
  • 我没有指定我认为的方言。它是由另一个开发人员设置的......我用一个包含字典的 staticSessionContext 初始化一个 NHibernateHelper: NHibernateHelper.Initialize(new StaticSessionContext(), new Configuration().Configure().BuildSessionFactory());

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


【解决方案1】:

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

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

【讨论】:

  • 啊是的,我在 app.config 文件中找到了它:NHibernate.Connection.DriverConnectionProviderNHibernate.Dialect .MsSql2012DialectNHibernate.Driver.SqlClientDriver
  • 对不起这些家伙。这个映射确实有效。我在此表中有另一列(名称列),定义为 varchar(50),但值为 51 个字符。如果只有错误消息会提到该列,也许我不会在这上面浪费我和你的时间......但一切又好了:-)
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多