0

私たちのシステムでは、オブジェクトをデータベースにマッピングするために nhibernate を使用しています。私たちのオブジェクトの1つにフィールドがあり、これはenumとして表されます(キーと値を持つenum、fe

public enum Status
    {
        Draft = 0,
        Archived = 1,
        Imported = 2
    }   

)

そのため、私たちのアプリケーションでは、列挙型で表されるフィールドでオブジェクトをソートする際の問題に直面しました。ソートは、列挙型のキーではなく、値によって行われます。その問題を修正するために、列挙型の文字列キー用にデータベースに追加フィールドを作成し、nhibenate モデル ファイルに変更を加えました。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <typedef name="StatusName" class="NHibernate.Type.EnumStringType`1[[Code.Model.Status, Code.Model]], NHibernate" />
...
<property name="Status"  type="StatusName" column="StatusName" not-null="true" />
...

その後、アプリケーションで並べ替えが正しく機能し始めました (レコードは列挙キーで並べ替えられます) が、データベースに新しいオブジェクトを作成した後、列挙キー (StatusName フィールド) の値のみが保存され、列挙値 (Status フィールド) は保存されません。

nhibernate 構成を使用して、列挙型のキーと値をデータベース列 (Status および StatusName 列) にマップする方法はありますか?

4

1 に答える 1

0

あなたの質問を正しく理解しているかどうかわかりません。列挙値の名前とその数値の両方をデータベースの 2 つの異なる列に格納するとします。

それを行う前に、本当にそれが必要かどうかを確認してください。冗長性です。冗長性は常に一貫性を保つのが難しく、通常は解決するにつれてより多くの問題を引き起こします。

これを実装するには、プロパティの値を複数の列に格納できる複合カスタム タイプを記述する必要があります。

ネットにはいくつかの例があります。ここまたはここ

于 2013-03-05T13:35:45.147 に答える