Oracle Blob字段的NHibernate架构导出问题

时间:2012-02-22 10:54:32

标签: oracle nhibernate types nhibernate-mapping

我在使用NHibernate的schemaexport函数创建我的Oracle DB时遇到了问题。 对于定义为byte []的属性,它创建一个RAW类型的DB字段(btw限制为2000字节)。 这个字段类型不足以满足我的需求,我需要NH来创建一个blob字段。 我怎么能做到这一点? 我尝试在映射文件中声明字段(我使用xml映射,因此使用hbm文件)指定type =“Binary”和type =“BinaryBlob”,但这些字段似乎都没有所需的效果:创建的字段始终是生的。 谁能在这帮助我?

3 个答案:

答案 0 :(得分:1)

<property name="prop">
  <column name="blobcolumn" sql-type="BinaryBlob">
</property>

更新:也许这也可以解决问题

<property name="prop" type="Binary" length="1000000"/>

答案 1 :(得分:1)

我有类似的问题,解决方案是长度属性:

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

如果你指定没有长度,那么你在type属性中写的任何东西它将在oracle中以RAW(2000)结尾,因为它的最大值是2000字节,但是如果你说我需要5 MB或者字节为5224880字节那么nhibernate自动切换到BLOB,因为它大于2000字节

所以给出了点网属性

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

正确的映射将是

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

或者你可以在Nhibernate的代码库(源代码)中探索OracleLiteDialect.cs

答案 2 :(得分:0)

如果有人想要一种常规方法来将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");
    }
}