У меня есть перечисление, которое я хотел бы сохранить как какое-то значение в базовой базе данных, чтобы я мог переносить его назад и вперед.
Я прочитал несколько статей, в которых предлагается создать оболочку перечисления с определенными статическими неявными операторами, сопоставленными с использованием сопоставления объектов ComplexType, как описано в ссылке ниже.
Как подделать Enums в EF4
Это решение работает без нареканий! Благодарю Алекс Джеймс .
Кроме того, я обнаружил EnumDataTypeAttribute Class
, цель которого, кажется, обрабатывает персистентность перечислений через Entity Framework. Я попробовал это, и это, кажется, не работает вообще. Вот пример кода.
public enum StreetDirection {
East
, None
, North
, NorthEast
, NorthWest
, South
, SouthEast
, SouthWest
, West
}
public enum StreetType {
Avenue
, Boulevard
, Court
, Crescent
, Drive
, Hill
, None
, Road
, Street
}
public class StreetTypeWrapper {
public int Value {
get {
return (int)t;
}
set {
t = (StreetType)value;
}
}
public StreetType EnumValue {
get {
return t;
}
set {
t = value;
}
}
public static implicit operator int(StreetTypeWrapper w) {
return w.Value;
}
public static implicit operator StreetType(StreetTypeWrapper w) {
return w == null ? StreetType.None : w.EnumValue;
}
public static implicit operator StreetTypeWrapper(int i) {
return new StreetTypeWrapper() { Value = i };
}
public static implicit operator StreetTypeWrapper(StreetType t) {
return new StreetTypeWrapper() { EnumValue = t };
}
private StreetType t;
}
public class Street {
[EnumDataType(typeof(StreetDirection))]
public StreetDirection Direction { get; set; }
public string Name { get; set; }
public int StreetId { get; set; }
public StreetTypeWrapper Type { get; set; }
}
public class StreetTypeMapping
: ComplexTypeConfiguration<StreetTypeWrapper> {
public StreetTypeMapping() {
Property(o => o.Value)
.HasColumnName("StreetType");
}
}
Теперь, если я верю и / или правильно понимаю, что MSDN говорит о классе EnumDataTypeAttribute
, свойство Direction
должно быть сохранено в базе данных. Ну, это не так! Я не могу найти причину этого, за исключением того, что EF не поддерживает постоянство перечислений. Что касается StreetTypeWrapper
и его StreetTypeMapping
класса, он работает безупречно.
Есть ли какая-нибудь подсказка, почему EnumDataType не должен работать должным образом?