繁体   English   中英

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

[英]Entity Framework 6 Code First - Required Enum data type not working

我正在使用必需的枚举字段生成数据库表。 但是,在提供表时,可以省略提供枚举字段: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; }
}

使用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; }
}

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

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

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

如果要验证它,则可以比较该值不等于0。

你能这样吗:

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

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

此处与int相关的类似讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM