【问题标题】:Entity Framework 6 Code First - Required Enum data type not workingEntity Framework 6 Code First - 必需的枚举数据类型不起作用
【发布时间】:2014-06-22 10:34:57
【问题描述】:

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


    【解决方案1】:

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

    【讨论】:

    • 我知道这是三年前的事了,但是这种方法复制了可能会导致错误的信息。例如,如果我将 test5 添加到 TestEnum,我必须记住更改任何具有 TestEnum 属性的 EF 对象的范围。
    • @Joe:像这样设置验证属性 [Range(1, int.MaxValue), Display(Name = "Test Enum")],以后添加的枚举不会有任何问题-values,除非手动输入了不正确的 int 值,如果你真的需要,你可以添加自定义验证来防御这些情况,例如让 TestEnumClass 实现 IValidateObject。 0 值是默认值,当没有给出值时,大于零的正整数必须手动输入。
    【解决方案2】:

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

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

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

    如果你想验证它,那么你可以比较那个值不等于0。

    【讨论】:

      【解决方案3】:

      你可以这样做吗:

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

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

      Similar discussion related to ints here.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 2013-11-02
        • 2014-03-07
        相关资源
        最近更新 更多