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