私は、元のデータベースに何らかの値として保持したいので、前後に持っていくことができます。Entity Frameworkを使用して.NET 4.0でEnumDataTypeAttributeが正しく動作する必要がありますか?
私は定義された静的暗黙の事業者と列挙ラッパーを作成することをお勧めいくつかの記事を読んだことが、下記のリンクで説明したように複合型オブジェクトのマッピングを使用してマッピングされました。
このソリューションは完璧に動作します! Alex Jamesに感謝します。
さておき、私は列挙型は、Entity Frameworkを経由永続扱うように思われる目的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がenumsの永続性をサポートしていないことを除いて、私はこれの理由を見つけることができません。 StreetTypeWrapper
とそのStreetTypeMapping
クラスについては、完璧に動作します。
は期待通りEnumDataTypeが動作しない理由の任意の手掛かりはありますか?
これについてはどうですか?私はAlex Jameの投稿にComplexTypeマッピングが表示されません。私はあなたのテンプレートに従いました。そして、Add-Migration中にカスタムラッパー(すなわちStreetTypeWrapper)にキーが定義されていないと言うエラーが出ました。モデル/コンテキストにDbSet <...Wrapper>がないにもかかわらず、ラッパーもエンティティであると思われるようです。 –