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

C# 实体框架6代码优先-必需的枚举数据类型不工作,c#,entity-framework-6,enumeration,C#,Entity Framework 6,Enumeration,我正在使用必需的枚举字段生成数据库表。 但是,在馈送表时,可以忽略馈送enum字段:EF不会抛出任何错误消息,但会向字段馈送0值。你能帮我理解发生了什么事吗? 谢谢 这是因为.NET中如何处理枚举类型。如果不提供值,则实际上与赋值0相同。如果已定义枚举的值为0,则会为枚举变量指定正确的值。如果未赋值-它仍赋值为0,但在尝试使用它时失败,因为它无法将int转换为正确的枚举值 在您的情况下,我建议是否可以添加一个值0并将其分配给特定值,或者分配默认值、Null或类似于您的枚举的值,例如 public

我正在使用必需的枚举字段生成数据库表。 但是,在馈送表时,可以忽略馈送enum字段:EF不会抛出任何错误消息,但会向字段馈送0值。你能帮我理解发生了什么事吗? 谢谢


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

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

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; }
}
也就是说,将“test”定义为可为null,然后将其标记为[Required],以强制其具有值


我知道这是三年前的事了,但这种方法重复了可能会导致错误的信息。例如,如果我将test5添加到
TestEnum
,我必须记住更改任何具有
TestEnum
属性的EF对象的范围。@Joe:设置如下验证属性[range(1,int.MaxValue),Display(Name=“Test Enum”)],除非手动输入不正确的int值,否则将来添加的enum值不会有任何问题。如果确实需要,您可以添加自定义验证以抵御这些情况,例如让TestEnumClass实现IValidateObject。0值是默认值。如果没有给定值,则必须手动输入大于零的正整数。
public class TestEnumClass
{
    [Key]
    public int id { get; set; }
    [Required(ErrorMessage = "Required"), Display(Name = "Test Enum")]
    public TestEnum? test{ get; set; }
}