Двоичный двоичный объект, усеченный до 8000 байт - SQL Server 2008 / varbinary (max) - PullRequest
23 голосов
/ 03 января 2011

Я обновился с Fluent Nhibernate 1.0 до Nhibernate 2.1 до выпустить 1.x с NHibernate 3.0 GA и достичь того, что я считаю регрессией, но я хочу услышать, так ли это на самом деле.

Я использую SQL Server Express 2008 и диалект MSSQL 2008 и имею Свойство изображения типа System.Drawing.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. Что не использовал быть в случае с предыдущими версиями.

Представления о том, почему это происходит и как это исправить / обойти?

Ответы [ 5 ]

22 голосов
/ 04 февраля 2011

Я тоже столкнулся с подобной проблемой, и после долгих экспериментов я заметил, что при использовании Nhibernate для генерации моей схемы в файл тип сгенерированного столбца всегда имел длину 8000.

Установка параметра CustomSqlType в Varbinary (max)как предложено выше, не имеет значения, однако, эта работа в моем FluentMapping, похоже, добилась цели:

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

Длина курса - произвольная величина, но я думаю, что она должна быть установлена ​​на что-то меньшее, чем int.Максимум.Я новичок в Nhibernate, поэтому я все еще разбираюсь, но мне было бы интересно узнать, поможет ли это вам.

5 голосов
/ 31 января 2011

В 3.0.0GA кажется, что следующее отображение помогает:

        <property name="Data" type="Serializable" length="2147483647" />
4 голосов
/ 14 января 2011

Это регрессия.Я поднял ошибку и предоставил исправления на https://nhibernate.jira.com/browse/NH-2484

1 голос
/ 19 августа 2011

Карта (x => x.Image) .Длина (100000) .Not.Nullable ();

Добавьте «Length (MAXVALUE)», как указано выше, и оно будет работать:)

0 голосов
/ 03 января 2011

Вы пробовали это?

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