Попытка создать обходной путь для обработки Enums в Entity Framework с использованием Generics, но EF, похоже, не заботится об общих свойствах. Например:
public enum MyEnum
{
One, Two, Three
}
public class SomePOCOWithEnum
{
// I want this to persist as an int, but EF doesn't like generics.
public EnumWrapper<MyEnum> MyEnumProperty { get; set; }
}
Цель состоит в том, чтобы перечисление сохранялось как INT в базе данных. Есть ли какой-то особый способ, использующий свободный или, возможно, какой-то другой механизм, с помощью которого я могу создать указанный универсальный класс и сохранить его как INT для базы данных в EF?
Цель состоит в том, чтобы сделать вещи общими, поскольку у меня есть около двух десятков перечислений, которые необходимо сохранить, и я бы не стал писать отдельные классы-оболочки для каждого из них.
Вот обобщенный класс EnumWrapper, который демонстрирует, чего я хотел бы достичь: неявное преобразование в enum, но постоянство как int:
public class EnumWrapper<T> where T : struct
{
private T enumValue;
public int Value
{
get { return Convert.ToInt32(enumValue); }
set { enumValue = (T)Enum.Parse(typeof(T), value.ToString()); }
}
public T EnumValue
{
get { return enumValue; }
set { enumValue = value; }
}
public static implicit operator T(EnumWrapper<T> wt)
{
return wt.EnumValue;
}
public static implicit operator EnumWrapper<T>(T t)
{
return new EnumWrapper<T>() { EnumValue = t };
}
public override string ToString()
{
return enumValue.ToString();
}
}