Provare a creare una soluzione alternativa per l'elaborazione di Enum in Entity Framework utilizzando Generics, ma EF non sembra interessarsi alle proprietà generiche. Ad esempio:Entity Framework: persistente enum in generale?
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; }
}
L'intenzione è di mantenere l'enum come INT nel database. C'è un modo speciale di usare fluentemente o forse qualche altro metodo di meccanismo con cui posso creare detta classe generica e mantenerla come INT al database all'interno di EF?
L'intenzione è di mantenere le cose generiche come ho circa due dozzine di enumerazioni che hanno bisogno di essere persistenti, e preferisco non scrivere singole classi di wrapper per ognuna di esse.
Ecco la classe generica EnumWrapper, che dimostra quello che mi piacerebbe realizzare: conversione implicita a enum, ma la persistenza come un 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();
}
}
Perché stai avvolgendo le enumerazioni? Sembra terribilmente ingombrante. – phoog
Perché EF non mantiene l'enumerazione. Sono aperto a qualsiasi modo migliore per farlo. –
Enum supportato è stato aggiunto in EF 5, quindi potresti voler [dare un'occhiata] (http://msdn.microsoft.com/en-us/data/hh859576.aspx) – sinelaw