2012-09-15 73 views
2

我正在一起使用NHibernate與Firebird數據庫和不知道如果String類型是否正確映射NHibernate的字符串映射。在.NET中,String-Type通常是UTF16編碼的。在Firebird中,我定義了我的域名wie字符集UTF8。到UTF8

所以,如果我有這個域名級:

public class Project 
{ 
    public virtual Int64 ID { get; set; } 
    public virtual String Name { get; set; } 
} 

,這NHibernate的映射:

<class name="Project"> 
<id name="Id"> 
    <generator class="sequence"> 
    <param name="sequence">MY_GEN</param> 
    </generator> 
</id> 
<property name="Name"/> 
</class> 

不NHibernate的自動我System.String轉換爲火鳥UTF8字符串在這種情況下? 這似乎是在數據庫中確定。但我不確定在NHibernate中的處理。

+4

它是誤導說「在.NET字符串型通常UTF16編碼」,因爲編碼是指序列化形式。一個字符串是*不是*;一個字符串是原始的Unicode代碼點 - 完全不同。通常,ADO.NET驅動程序(或其他驅動程序)將負責此步驟 - 在大多數情況下,我不希望ORM工具與編碼有任何關係。 –

回答

1

默認字符串類型NHibernate的節省使用DbType.String(這是Unicode字符串)的數據。 Firebird將爲UTF8編碼unicode字符串。

替代(沒有進入自定義類型)是指定的AnsiString類型類型也將與UTF8工作,如果你使用的所有是ASCII字符。

既然你不指定類型,NHibernate的會使用它的StringType,它會正常工作。