Можно ли сопоставить перечисление с псевдонимом? - PullRequest
1 голос
/ 02 июля 2019

Мне приходит http-запрос, у которого есть свойство для значения.Для этого значения есть 2 возможных варианта, скажем, Standard и Boosted.Для этого я использую перечисление.

Мне также нужно получить то же значение из моей базы данных, но в базе данных это значение называется чем-то другим.Например, они называются TypeS и TypeB.

Я ищу простой способ сопоставить их друг с другом.

Я пытался использовать псевдоним, но это не похоже наработать.

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

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

Я получаю запись из базы данных, используя сохраненный процесс.

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

ReturnObject.type всегда Standard, даже если Database возвращает TypeB, который сообщает мнесоздает экземпляр перечисления со значением по умолчанию.

1 Ответ

3 голосов
/ 02 июля 2019

В последней версии 5.5.1 на MyGet , OrmLite поддерживает перечисления , например,

[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,
}

Или по значению символа, как показано в моем первом примере.

В качестве альтернативы вам может понадобитьсяиспользовать имя, которое хранится в базе данных как, но его можно сериализовать, используя другое значение, пометив его с помощью [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,
}
...