试图创建一个解决方法来处理使用泛型的实体框架中的枚举,但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。有没有什么特殊的方式使用流利或其他机制的方法,我可以创建所述泛型类,并保持它作为EF内的数据库INT?
其意图是保持通用性,因为我有大约二十几个需要持久的枚举,并且我宁愿不为它们中的每一个编写单独的包装类。
这里是通用EnumWrapper类,这表明想我做到:隐式转换到枚举,但持久性作为一个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();
}
}
你为什么要打包枚举?这似乎非常麻烦。 – phoog 2011-12-30 22:34:56
因为EF不会持续枚举。我愿意接受任何更好的方式。 – 2011-12-31 16:46:57
Enum支持被添加到EF 5,所以你可能想[检查出来](http://msdn.microsoft.com/en-us/data/hh859576.aspx) – sinelaw 2012-10-17 01:28:40