0

こことウェブ上の他の場所ですべての回答を調べましたが、何も機能していないようです。「Image」という名前の varbinary(max) データ型を持つテーブル (SQL サーバー 2014) があります。NHibernate バージョン 3.3.1.4000 を使用しています。

これは私の現在の休止状態のマッピングです:

   <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'";
          });

Driver と Dialect を指定していることに注意してください。MsSql2005DialectVARBINARY(MAX)以前はサポートされていませんでした。

于 2014-07-29T16:12:20.393 に答える