实体框架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
}
这可能是我个人的一个简单误解,但任何想法/帮助都会受到高度赞赏。
答案 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; }
}