試圖創建一個解決方法來處理使用泛型的實體框架中的枚舉,但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