带有Oracle Blob字段的NHibernate架构导出问题
我在使用NHibernate的schemaexport函数创建Oracle数据库时遇到问题。 对于定义为byte[]的属性,它将创建类型为RAW的DB字段(顺便说一句,限制为2000 byte)。 这个字段类型不足以满足我的需要,我需要创建一个blob字段。 我怎样才能做到? 我尝试在映射文件中声明字段(我使用xml映射,因此使用hbm文件),指定type=“Binary”和type=“BinaryBlob”,但这些都没有达到预期效果:创建的字段始终是原始字段。 有人能帮我吗?带有Oracle Blob字段的NHibernate架构导出问题,oracle,nhibernate,types,nhibernate-mapping,Oracle,Nhibernate,Types,Nhibernate Mapping,我在使用NHibernate的schemaexport函数创建Oracle数据库时遇到问题。 对于定义为byte[]的属性,它将创建类型为RAW的DB字段(顺便说一句,限制为2000 byte)。 这个字段类型不足以满足我的需要,我需要创建一个blob字段。 我怎样才能做到? 我尝试在映射文件中声明字段(我使用xml映射,因此使用hbm文件),指定type=“Binary”和type=“BinaryBlob”,但这些都没有达到预期效果:创建的字段始终是原始字段。 有人能帮我吗? <prop
<property name="prop">
<column name="blobcolumn" sql-type="BinaryBlob">
</property>
更新:也许这也可以达到目的
<property name="prop" type="Binary" length="1000000"/>
我遇到了类似的问题,解决方案是长度属性:
<property name="Attachment" length="5224880"/>
正确的映射应该是
<property name="Attachment" length="5224880"/>
或者,如果有人想要在数据库中将byte[]类型转换为BLOB的常规方法,您可以在Nhibernate的代码库(源代码)中浏览OracleLiteDialogue.cs,我提出了以下建议:
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");
}
}
公共类ByteArrayToDbBlobConvention:IPropertyConvention,IPropertyConvention Acceptance
{
公共无效接受(IAcceptanceCriteria标准)
{
Expect(x=>x.Type==typeof(byte[]);
}
公共无效应用(IPropertyInstance实例)
{
CustomSqlType(“BLOB”);
}
}
您能告诉我在哪里可以找到sql类型的可能值吗?与type=“BinaryBlob”
有什么区别?sql type
用于指定数据库中存在的数据库类型。我不知道是否有预定义的值,或者在sqlcreatescript中它是否仅作为字符串发送
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");
}
}