8

当包含在 int 字段中时,Entity Framework 5.0.0 似乎忽略了 [Required] 属性,并自动包含 0 值而不是引发异常。但是,如果该字段是字符串,则 required 属性似乎确实有效。下面的简单模型和创建函数不会引发异常。为简洁起见,未显示具有 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
}

这可能是我的一个简单的误解,但任何想法/帮助将不胜感激。

4

2 回答 2

17

[Required]属性指示必须存在一个值。Degree构造a 时,Field初始化为 0,因为这是ints 的默认值。因为 0 是一个值,所以它满足[Required]属性。

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

于 2012-10-12T22:39:18.780 回答
7

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

如果您希望该列可以为空,请设置属性的类型int?。对于可为空的类型,如果值为 EF,则 EF 将引发错误null

public class Degree
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public int? Field { get; set; }
}
于 2012-10-12T22:40:09.223 回答