是否可以使用别名映射到枚举?

时间:2019-07-01 21:14:23

标签: c# enums servicestack ormlite-servicestack

我有一个http请求,该请求具有一个值的属性。该值有2个可能的选项,例如“标准”和“增强”。我为此使用了一个枚举。

我还需要从数据库中获取相同的值,但是在数据库中此值称为其他值。例如,它们被称为TypeS和TypeB。

我正在寻找一种将它们彼此映射的简单方法。

我已经尝试过使用别名,但这似乎不起作用。

pubic enum RequestType
{
    [Alias("TypeS")]
    Standard,
    [Alias("TypeB")]
    Boosted
}

public class ReturnObject
{
    public RequestType type {get; set;}
}

我正在使用存储的proc从数据库中获取记录。

db.SqlList<ReturnObject>("EXEC SomeStoredProc @someParameter",
                    new { someParameter }).ToList();

即使数据库返回TypeB,ReturnObject.type始终是标准的,告诉我它使用默认值实例化枚举。

1 个答案:

答案 0 :(得分:3)

latest v5.5.1 on MyGetOrmLite supports char enums中,例如

[EnumAsChar]
public enum SomeEnum
{
    Value1 = 'A', 
    Value2 = 'B', 
    Value3 = 'C', 
    Value4 = 'D'
}

否则,OrmLite支持持久枚举的唯一其他方法是按名称(默认):

public enum SomeEnum
{
    Value1, 
    Value2, 
    Value3, 
    Value4,
}

按Enum整数值:

[Flags] //or [EnumAsInt]
public enum SomeEnum
{
    None = 0,
    Value1 = 1 << 0, 
    Value2 = 1 << 1, 
    Value3 = 1 << 2, 
    Value4 = 1 << 3,
}

或者按照第一个示例中所示的char值。

或者,您需要使用存储在数据库中的名称,但是您可以通过用[EnumMember]对其进行注释来使用其他值对它进行序列化,例如:

[DataContract]
public enum SomeEnum
{
    [EnumMember(Value = "VALUE 1")]
    Value1, 
    [EnumMember(Value = "VALUE 2")]
    Value2, 
    [EnumMember(Value = "VALUE 3")]
    Value3, 
    [EnumMember(Value = "VALUE 4")]
    Value4,
}