.net NHibernate字符串映射到UTF8

.net NHibernate字符串映射到UTF8,.net,nhibernate,unicode,firebird,.net,Nhibernate,Unicode,Firebird,我将NHibernate与Firebird数据库一起使用,不确定字符串类型是否正确映射。在.NET中,字符串类型通常是UTF16编码的。在Firebird中,我定义了我的域wie字符集UTF8 因此,如果我有这个域类: public class Project { public virtual Int64 ID { get; set; } public virtual String Name { get; set; } } 这个NHibernate映射: <class n

我将NHibernate与Firebird数据库一起使用,不确定字符串类型是否正确映射。在.NET中,字符串类型通常是UTF16编码的。在Firebird中,我定义了我的域wie字符集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转换为Firebird UTF8字符串?
在数据库中似乎还可以。但我不确定NHibernate中的处理方式。

NHibernate的默认字符串类型使用DbType.string(Unicode字符串)保存数据。Firebird将用UTF8为您编码unicode字符串

另一种选择(不涉及自定义类型)是指定一个AnsiString类型,如果只使用ASCII字符,该类型也可以与UTF8一起使用

由于您没有指定类型,NHibernate将使用它的StringType,它将正常工作。

说“在.NET中,字符串类型通常是UTF16编码的”,这是误导,因为编码指的是序列化形式。一根绳子不是这样;字符串是原始Unicode代码点-完全不同。通常情况下,ADO.NET驱动程序(或其他驱动程序)将负责此步骤-在大多数情况下,我不希望ORM工具与编码有任何关系。