我有一個枚舉,我想將它作爲某種類型的值存儲在底層數據庫中,以便我可以來回移動它。EnumDataTypeAttribute應該使用實體框架在.NET 4.0中正確工作嗎?
我讀過一些文章,建議創建一個靜態隱式運算符定義的枚舉包裝,使用複雜類型對象映射映射,如下面的鏈接中所述。
該解決方案完美的作品!我感謝Alex James。
除此之外,我發現EnumDataTypeAttribute Class
哪個目的似乎通過實體框架處理枚舉持久性。我試過了,它似乎根本不起作用。這是一個代碼示例。
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不能按預期工作?
對嗎?我沒有在Alex Jame的帖子上看到ComplexType映射。我跟隨你的模板,並在添加遷移期間,我得到一個錯誤,說自定義包裝(即StreetTypeWrapper)沒有定義的鍵。儘管我在模型/上下文中沒有DbSet <...Wrapper>,但它似乎認爲包裝也是一個實體。 –