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

Meb*_*rne 7 c# attributes entity entity-framework

实体框架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
}
Run Code Online (Sandbox Code Playgroud)

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

Str*_*ior 16

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

您可能希望尝试使用[Range]属性来指定该值必须大于0.或者您可以将模型更改为具有int?,以便null除非将其初始化为某个值.


hea*_*vyd 7

您的字段的类型int始终具有值.当你创建一个新的实例Degree类的Field属性将被初始化为0.

如果希望列可以为空,请创建属性的类型int?.对于可空类型,如果值为EF,则会抛出错误null.

public class Degree
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public int? Field { get; set; }
}
Run Code Online (Sandbox Code Playgroud)