2011-01-03 14 views
23

Nhibernate 2.1からFluent Nhibernate 2.1にアップグレードしてから リリース1.xをNHibernate 3.0 GAより先にアップグレードし、しかし、それが事実であるかどうか聞いてみたい。バイナリのBlobを8000バイトに切り捨て - SQL Server 2008/varbinary(max)

私はSQL Server Expressの2008とMSSQL 2008方言を使用し、型System.Drawing.Imageの Imageプロパティを持っていると私は このようにそれをマッピングしているのです

:中

Map (food => food.Image) 
.Length (int.MaxValue) 
.Nullable(); 

Imageコラムテーブルのタイプはvarbinary(MAX)です。

プロパティの生成HBMは次のとおりです。

<property name="Image" type="System.Drawing.Image, System.Drawing, 
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> 
    <column name="Image" length="2147483647" not-null="false" /> 
</property>` 

私は何をすべきかに関係なく、バイナリブロブは8000バイト 時にシリアル化された現在のFNHとNHのバージョンとに切り捨てられますが。以前のバージョンの場合は、 を使用していませんでした。

なぜこれが起こっているのか、どのように修正/回避するのかについてのアイデアはありますか?

答えて

4

これは回帰です。 Iバグを上げ、3.0.0GAでhttps://nhibernate.jira.com/browse/NH-2484

+0

私はNHibernate 3.1.0.4000と同じ問題があります。私は何か間違っているのですか? – labilbe

+0

私は知らない - 私はパッチ3.0を使用し、3.0で他のdepsのために今すぐテストするために3.1にアップデートすることはできません。私のテストケースをバグレポートから取り出し、3.0を3.1に置き換えて、それがまだスローされるかどうかを確認するのが最も簡単です。そうであれば、欠陥を再開し、一時的にImageのカスタムUserTypeを使用してデータのサイズを強制することができます。 –

+0

さらにテストしたところ、NH 3.1.0はもうバグではないことがわかりました。私は別のバージョンの破損したデータ(8000バイトで保存されている)を使用していましたが、そのバグの原因を突き止めるのは困難でした。今は大丈夫です。ありがとうございました! – labilbe

0

これを試しましたか?

Map(x => x.Image).CustomSqlType("VARBINARY(MAX)"); 
+0

はい私はそれを試しても違いはありません。私は流暢NHibernateの人とチェックしていると私はnhibernateの問題を提起したので、彼らの側に回帰ではありません。 –

5

にパッチを提供している、以下のマッピングは、トリックを行うようだ:

 <property name="Data" type="Serializable" length="2147483647" /> 
+0

私は長さを追加しましたが、それは私のために働いた。ありがとう。 –

22

私も同様の問題が発生しており、多くの実験の後、私は時に気づいNhibernateを使用してスキーマをファイルに生成すると、生成された列の型は常に8000です。

上記のようにCustomSqlTypeをVarbinary(max)に設定しても差はありませんでしたが、FluentMappingのこの回避策は、 :

Map(x => x.LogoBytes).CustomType("BinaryBlob").Length(1048576).Nullable(); 

もちろん、長さは任意ですが、int.Maxよりも小さい値に設定する必要があります。私はNhibernateの新人ですので、まだ物事を考え出していますが、これがあなたに役立つかどうかを知りたいと思うでしょう。

+4

これは私のためにそれを修正しました。しかし、私は長さにint.MaxValueを使用して、下限を設けないようにしました。 –

+0

nhibernate 3.2.0.4000およびfluentnhibernate 1.3.0.717の時点で、私は8000の限界を超えてこれを使用しなければなりませんでした。 – chrisortman

+0

解決策も私のために働いた。私はNH 3.2.400とコードによるマッピングを使用しているので、map.Property(x => x.Image、 status => status.Column(c => { c.SqlType( "VARBINARY MAX)」); c.Length(int.MaxValue); })); –

1

マップ(x => x.Image)。長さ(100000).Not.Nullable();

上記のように 'Length(MAXVALUE)'を追加すると動作します:)

関連する問題