5

LinqToDB は Enum プロパティの値を、整数値ではなく Enum の文字列値として保存できますか?

public enum OrderType
{
    New,
    Cancel
}

[Table("Orders")]
public class Order
{
    [PrimaryKey, Identity]
    public int OrderId { get; set; }

    [Column]
    public OrderType Type { get; set; }
}

0 または 1 の代わりに「新規」または「キャンセル」をデータベースに保存するように LinqToDB を取得するにはどうすればよいですか?

更新: LinqToDB の答えは、列挙型に MapValue 属性を設定することです。私は、データ オブジェクトでそれを指定する場所を見つけようとしていました。

public enum OrderType
{
    [LinqToDB.Mapping.MapValue(Value = "NEW")]
    New,
    [LinqToDB.Mapping.MapValue(Value = "CANCEL")]
    Cancel
}

これにより、列挙型に指定された値がテキストとしてデータベースに保存されます。

4

3 に答える 3

8

LinqToDB の答えは、列挙型に MapValue 属性を設定することです。私は、データ オブジェクトでそれを指定する場所を見つけようとしていました。

public enum OrderType
{
    [LinqToDB.Mapping.MapValue(Value = "NEW")]
    New,
    [LinqToDB.Mapping.MapValue(Value = "CANCEL")]
    Cancel
}
于 2015-04-14T17:03:41.520 に答える
0

これらの値を文字列に変換する必要があるのはなぜですか? これらを行うには、データベースのパフォーマンスとサイズを考慮する必要があります。それを行う簡単な方法が必要な場合は、次のようなものを使用できます。

public class Order
{
    [PrimaryKey, Identity]
    public int OrderId { get; set; }

    [Column]
    public OrderType Type { get; set; }

    private string _DisplayType;
    [NotMapped]
    public string DisplayType
    {
        get
        {
            if (Type != null)
                _DisplayType = Type.ToString();
            else
                _DisplayType = string.Empty;

            return _DisplayType;
        }
        set
        {
            if (_DisplayType != value)
            {
                _DisplayType = value;
            }
        }

    }
}

別の場所に表示したい場合は、DisplayType をバインドできます。データベースの値を変更する場合は、Type プロパティを使用できます。

于 2015-04-14T07:18:51.107 に答える