2012-02-22 49 views
1

我遇到一個問題,用NHibernate的schemaexport函數創建我的Oracle數據庫。 對於定義爲byte []的屬性,它創建一個RAW類型的DB字段(順便限制爲2000字節)。 此字段類型不足以滿足我的需要,而我需要NH來創建blob字段。 我該如何存檔? 我試圖在映射文件(我使用xml映射,因此hbm文件)中聲明字段指定type =「Binary」和type =「BinaryBlob」,但是這些字段都沒有達到預期的效果:創建的字段總是RAW。 任何人都可以幫助我嗎?與Oracle Blob字段NHibernate模式導出問題

回答

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

更新:也許這也可以做的伎倆

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

你能指點我在哪裏可以找到sql-type可能的值嗎? 'type =「BinaryBlob」'有什麼區別? – themarcuz 2012-02-22 11:27:39

+0

'sql-type'用於指定數據庫中存在的數據庫類型。我不知道是否有預定義的值,或者它是否只在sqlcreatscript中作爲字符串發送 – Firo 2012-02-22 12:00:13

1

我有一個類似的問題和解決的辦法是長度屬性:

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

如果未指定長度那麼無論你在類型屬性中寫入它將以oracle中的RAW(2000)結尾,因爲它的最大值是2000字節,但如果你說我需要5 MB或5224880字節的字節,那麼nhibernate切換到BLOB自動地y方法,因爲它是更大然後2000個字節

所以給點淨資產

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

正確映射將

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

或者你可以探索在代碼庫的OracleLiteDialect.cs(源代碼)的Nhibernate

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"); 
    } 
}