EF 5忽略Int类型上的[必需]属性

时间:2012-10-12 22:34:20

标签: c# entity-framework attributes entity

实体框架5.0.0似乎在包含在int字段时忽略[Required]属性,并自动包含0值而不是抛出异常。如果字段是字符串,则必需属性似乎有效。下面的简单模型和创建函数不会引发异常。为简洁起见,未显示带有DbSet度的DbContext类。

public class Degree
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public int Field { get; set; }
}


private static void CreateDegree()
{
    var degree = new Degree { Name = "Mechanical Engineering" };
    var db = new Context();
    db.Degrees.Add(degree);

    // try statement
}

这可能是我个人的一个简单误解,但任何想法/帮助都会受到高度赞赏。

2 个答案:

答案 0 :(得分:16)

[Required]属性表示必须存在值。构造Degree时,Field初始化为0,因为这是int的默认值。由于0是一个值,因此它满足[Required]属性。

您可能需要尝试[Range]属性来指定该值必须大于0.或者您可以将模型更改为int?,以便null除非它被初始化为某个值。

答案 1 :(得分:7)

您的字段属于int类型,它始终具有值。当您创建Degree类的新实例时,Field属性将初始化为0.

如果希望列可以为空,请输入属性int?的类型。如果值为null,则使用可为空的类型EF将抛出错误。

public class Degree
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public int? Field { get; set; }
}