2

NHibernate を Firebird データベースと一緒に使用していますが、文字列型が正しくマップされているかどうかわかりません。.NET では、文字列型は通常 UTF16 でエンコードされます。Firebird では、文字セット UTF8 でドメインを定義しました。

したがって、このドメインクラスがある場合:

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

およびこの Hibernate マッピング:

<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でエンコードします。

別の方法(カスタムタイプに入らないで)は、使用したのがASCII文字だけの場合にUTF8でも機能するAnsiStringタイプを指定することです。

タイプを指定していないため、NHibernateはStringTypeを使用し、正しく機能します。

于 2012-09-17T13:55:21.870 に答える