0

私はこのようなモデルを持っています:

public class Order
{
    public virtual int OrderType { get; set; }
}

int(もちろん、他の多くのプロパティは省略されています) DBのタイプに直接マップされます。

問題は、数値の順序タイプは私のアプリケーションにとって無意味です。注文の種類を示す 1 文字のコードがユーザーに表示されます。だから、私はこのようなことができます:

public class Order
{
    public virtual int OrderTypeIgnored { get; set; }
    public virtual char OrderType
    {
        get
        {
            return translateForward(OrderTypeIgnored);
        }
        set(char val)
        {
            OrderTypeIgnored = translateBackward(val);
        }
    }
}

(そこにはたくさんのエアコード/疑似コードがあります。私は比較的C#に慣れていません)そしてOrderTypeIgnoredプロパティをマップするだけです。しかし、これを行うためのよりクリーンな方法はありますか? おそらく、マップされたプロパティ自体でゲッターとセッターを何らかの形でオーバーライドしているのでしょうか?

いくつかの注意事項: 値は十分に静的であるため、翻訳をコードに埋め込むことは問題になりません。いいえ、LOV テーブルはありません。データベース構造を制御することもできません。

これに対する回答がある場合は申し訳ありませんが、「マッピング」や「翻訳」などを検索しても、探している結果が得られないことは明らかです。

4

2 に答える 2

0

enumsこんなシチュエーションで いつでも使えます。

次のように定義できます。

namespace MyApp.Domain
{
    using System.ComponentModel;

    public enum OrderType : short
    {
        [Description("Order Suspended")]
        Suspended = 1,
        [Description("Order Delivered")]
        Delivered = 2,
        [Description("Order New")]
        Inserted = 3
    }
}

次のようにマッピングします。

<property name="Type" type="MyApp.Domain.OrderType, MyApp.Domain" >
  <column name="Type" not-null="true"/>
</property>

したがって、次のような簡単な方法で QueryOver を記述できます。

var orders = this.Session.QueryOver<MyApp.Domain.Orders>()
                .Where(x => x.Type == MyApp.Domain.OrderType.Inserted)
                .List();
于 2013-06-26T11:04:49.993 に答える
0

プライベート フィールドを使用するパブリックcharプロパティを作成し、intフィールドのみをマップすることができます。

モデル:

public class Order
{
    private int _orderType;
    public virtual char OrderType
    {
        get
        {
            return TranslateForward(_orderType);
        }
        set
        {
            _orderType = TranslateBackward(value);
        }
    }
}

マッピング:

<property name="_orderType" access="field" />

フィールドを直接マップしたくない場合 (コンパイルセーフなマッピングを使用するため)、アクセス戦略「フィールド」、「camelcase-underscore」などの命名戦略を使用してパブリック プロパティをマップし、「Int32」を明示的に指定できます。 " タイプ。

于 2013-06-25T12:09:20.143 に答える