2

我将 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 中的处理方式。

4

1 回答 1

1

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

另一种选择(不涉及自定义类型)是指定一个 AnsiString 类型,如果您使用的只是 ASCII 字符,该类型也适用于 UTF8。

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

于 2012-09-17T13:55:21.870 回答