实体框架6代码优先 - 必需的枚举数据类型不起作用

问题描述 投票:24回答:3

我正在使用必需的枚举字段生成数据库表。但是,在输入表格时,可以省略输入枚举字段: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; }
}
c# entity-framework-6 enumeration
3个回答
17
投票

这是因为在.NET中处理Enum类型的方式。如果您未提供值,则实际上与分配值0的情况相同。如果您的枚举值定义为0,则将正确的值分配给枚举变量。如果未分配值 - 它仍然指定值0但在尝试使用它时失败,因为它无法将int转换为正确的枚举值。

在您的情况下,我建议是否可以添加值0并将其分配给特定值或指定Default,Null或类似于您的枚举的值,例如

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

如果要验证它,则可以比较该值不等于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; }
}

0
投票

你能这样做吗:

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

也就是说,将“test”定义为可为空,但然后将其标记为[Required]以强制它具有值。

Similar discussion related to ints here.

© www.soinside.com 2019 - 2024. All rights reserved.