我有一个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始终是标准的,告诉我它使用默认值实例化枚举。
答案 0 :(得分:3)
在latest v5.5.1 on MyGet,OrmLite 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,
}