3

私は現在、次のようにマッピングされたNHibernateで列挙を使用しています..

public enum UploadMethod
{
    Java, Silverlight, Gears, Flash
}

class UploadMethodType : EnumStringType
{
    public UploadMethodType() : base(typeof(UploadMethod), 255) { }
}

public class Person
{
    /* Bunch of non interesting properties... */
    public UploadMethod PreferredUploadMethod { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
 <class name="Person" lazy="false" table="[dbo].[People]">
  <!-- Bunch of non interesting properties... -->
  <property name="PreferredUploadMethod" type="UploadMethodType" />
 </class>
</hibernate-mapping>

データベースが正規化されていないことを除いて、これは完全に機能します。People テーブルのすべての行には、4 つのテキスト文字列のいずれかを含む列があります。これを新しいテーブルに分割しましたが、NHibernate でマッピングを作成する方法がわかりません。私の最初の本能は<many-to-one>、この列挙を独自のエンティティにしたくないということでした。基本的には、追加の列に追加するために単純な結合を行うために NHibernate が必要なだけです。

応急処置として、ビューを作成しましたが、これは正常に動作しますが、スキーマではなく、NHibernate マッピングに抽象化レイヤーを配置したいと考えています。

4

1 に答える 1

5

私の理解が正しければ、データベースは完全に正規化されています。Enum を文字列として格納するように NHibernate に指示しましたが、これは良いことです。列挙型はエンティティではありません。その定義は C# で定義されているため、データベースに格納しないでください。

EnumStringType を削除し、列挙型を Int32 としてマップすると、数値として取得されます。これはより「正規化」されているように見えるかもしれませんが、列挙型を変更してレガシー データベースに対処しなければならない場合に潜在的な問題となります。

于 2008-12-22T22:41:45.920 に答える