我正在使用必需的枚举字段生成数据库表。 但是,在输入表格时,可以省略输入枚举字段: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; }
}
答案 0 :(得分:34)
使用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; }
}
答案 1 :(得分:17)
这是因为在.NET中处理Enum类型的方式。如果您未提供值,则实际上与分配值0的情况相同。如果您的枚举值定义为0,则将正确的值分配给枚举变量。如果没有赋值 - 它仍然赋值0但是当你尝试使用它时它会失败,因为它无法将int转换为正确的枚举值。
在您的情况下,我建议是否可以添加值0并将其指定给特定值或指定Default,Null或类似于枚举的值,例如
public enum TestEnum {
NotSet = 0,
test1 = 1,
test2 = 2,
test3 = 3,
test4 = 4
}
如果你想验证它,那么你可以比较该值不等于0。
答案 2 :(得分:0)
您可以这样做吗?
public class TestEnumClass
{
[Key]
public int id { get; set; }
[Required(ErrorMessage = "Required"), Display(Name = "Test Enum")]
public TestEnum? test{ get; set; }
}
也就是说,将“测试”定义为可为空,然后将其标记为[必需]以强制其具有值。