web-dev-qa-db-ja.com

Entity Framework 6 Code First-必要な列挙データ型が機能しない

必須の列挙型フィールドを使用してデータベーステーブルを生成しています。ただし、テーブルをフィードする場合、enumフィールドのフィードを省略することができます。EFはエラーメッセージをスローせず、フィールドに値0をフィードします。何が起こっているのか理解するのを手伝ってもらえますか?ありがとう

   public enum TestEnum {
        test1=1,
        test2=2,
        test3=3,
        test4=4
    }

public class TestEnumClass
{
    [Key]
    public int id { get; set; }
    [Required(ErrorMessage = "Required"), Display(Name = "Test Enum")]
    public TestEnum test{ get; set; }
}
24
tit

これは、.NETでEnum型がどのように処理されるかによるものです。値を指定しない場合、値0が割り当てられた場合と事実上同じです。列挙型の値が0に定義されている場合、正しい値が列挙型変数に割り当てられます。値が割り当てられていない場合-値0が割り当てられますが、intを正しい列挙値に変換できないため、使用しようとしても失敗します。

あなたの場合、0の値を追加して特定の値に割り当てるか、Default、Null、またはenumに似た値を割り当てることができるかどうかを提案します.

public enum TestEnum {
    NotSet = 0,
    test1 = 1,
    test2 = 2,
    test3 = 3,
    test4 = 4
}

検証する場合は、値が0と等しくないことを比較できます。

17
dotnetom

RangeAttributeを使用します。

public enum TestEnum
{
    test1 = 1,
    test2 = 2,
    test3 = 3,
    test4 = 4
}

public class TestEnumClass
{
    [Key]
    public int id { get; set; }

    [Range(1, 4), Display(Name = "Test Enum")]
    public TestEnum test{ get; set; }
}
34
Petr Hruzek

この方法でできますか:

public class TestEnumClass
{
    [Key]
    public int id { get; set; }
    [Required(ErrorMessage = "Required"), Display(Name = "Test Enum")]
    public TestEnum? test{ get; set; }
}

つまり、「テスト」をヌル可能に定義しますが、[必須]にマークを付けて値を強制します。

intに関連する同様の議論はこちら

0
DRLaFosse