Проблема экспорта схемы NHibernate с полем Oracle Blob - PullRequest
1 голос
/ 22 февраля 2012

У меня проблема с созданием базы данных Oracle с функцией schemaexport NHibernate. Для свойства, определенного как byte [], оно создает поле БД типа RAW (кстати, ограничено 2000 байтами). Этого типа поля недостаточно для моих нужд, и мне нужно, чтобы NH создал поле BLOB-объектов. Как я могу достичь этого? Я попытался объявить поле в файле сопоставления (я использую сопоставление xml, то есть файлы hbm), указав либо type = "Binary", либо type = "BinaryBlob", но ни один из них, по-видимому, не имеет желаемого эффекта: созданное поле всегда RAW. Может ли кто-нибудь помочь мне здесь?

Ответы [ 3 ]

1 голос
/ 13 сентября 2012

У меня была похожая проблема, и решение - атрибут длины:

<property name="Attachment" length="5224880"/>

Если вы не укажете длину, то, что бы вы ни написали в атрибуте типа, оно закончится как RAW (2000) в oracle, потому чтоего максимум составляет 2000 байт, но если вы скажете, что мне нужно 5 МБ или в байтах его 5224880 байт, тогда nhibernate автоматически переключится на BLOB, потому что он больше 2000 байт

, поэтому, учитывая свойство dot net

 public virtual byte[] Attachment { get; set; }

правильное отображение будет

<property name="Attachment" length="5224880"/>

Или вы можете изучить OracleLiteDialect.cs в кодовой базе (исходный код) Nhibernate

1 голос
/ 22 февраля 2012
<property name="prop">
  <column name="blobcolumn" sql-type="BinaryBlob">
</property>

Обновление: возможно, это тоже может помочь

<property name="prop" type="Binary" length="1000000"/>
0 голосов
/ 05 февраля 2015

Если кто-то хочет, чтобы общепринятый способ преобразования типа byte [] в BLOB в базе данных, я придумал:

public class ByteArrayToDbBlobConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(x => x.Type == typeof(byte[]));            
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.CustomSqlType("BLOB");
    }
}
...