必須の列挙型フィールドを使用してデータベーステーブルを生成しています。ただし、テーブルをフィードする場合、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; }
}
これは、.NETでEnum型がどのように処理されるかによるものです。値を指定しない場合、値0が割り当てられた場合と事実上同じです。列挙型の値が0に定義されている場合、正しい値が列挙型変数に割り当てられます。値が割り当てられていない場合-値0が割り当てられますが、intを正しい列挙値に変換できないため、使用しようとしても失敗します。
あなたの場合、0の値を追加して特定の値に割り当てるか、Default、Null、またはenumに似た値を割り当てることができるかどうかを提案します.
public enum TestEnum {
NotSet = 0,
test1 = 1,
test2 = 2,
test3 = 3,
test4 = 4
}
検証する場合は、値が0と等しくないことを比較できます。
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; }
}
この方法でできますか:
public class TestEnumClass
{
[Key]
public int id { get; set; }
[Required(ErrorMessage = "Required"), Display(Name = "Test Enum")]
public TestEnum? test{ get; set; }
}
つまり、「テスト」をヌル可能に定義しますが、[必須]にマークを付けて値を強制します。