EFCore里的数据校验特性

[Required[MinLength(3,ErrorMessage "名称长度至少为3")[Display(Name "名称")public string Name getset}


 

[Required] 表示必需的,
[MinLength(3,ErrorMessage = “名称长度至少为3”)],这里表示名称长度至少为3个字符
[Display(Name = “名称”)]这里将name显示为名称
[Range(16,100,ErrorMessage = “年龄范围为16-100”)]范围验证

ErrorMsg是校验失败时显示的提示信息。

EFCore里的数据校验特性主要来源于System.ComponentModel.DataAnnotations命名空间


 

CustomValidationAttribute可以采用用户自己定义的验证方法来进行验证。
但是一般都是通过继承 ValidationAttribute来进行自定义验证特性。

如:

public class Student
   {
       public int Id { get; set; }
        
       [Required]
       [MinLength(3,ErrorMessage = "名称长度至少为3")]
       [Display(Name = "名称")]
       public string Name { get; set; }
       
       [CheckSex]
       public string Sex { get; set; }
       [Range(16,100,ErrorMessage = "年龄范围为16-100")]
       public int Age { get; set; }
 
       public ICollection<Course> Courses { get; set; }
 
   }
 
   [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
   public class CheckSexAttribute : ValidationAttribute
   {
       protected override ValidationResult IsValid(object value, ValidationContext validationContext)
       {
           bool result= value.ToString() == "" || value.ToString() == "";
           return result ? ValidationResult.Success : new ValidationResult("性别必须为男或者女");
       }
   }

除此之外还可以通过 RegularExpressionAttribute,自己来定义一些相关的验证规则,继续以上面的性别为例,进行相关的验证。

修改student如下:

public class Student
   {
       public int Id { get; set; }
        
       [Required]
       [MinLength(3,ErrorMessage = "名称长度至少为3")]
       [Display(Name = "名称")]
       public string Name { get; set; }
       
       [RegularExpression("[0-1]",ErrorMessage = "性别只能为数字0(男)或者1(女)")]
       public string Sex { get; set; }
       [Range(16,100,ErrorMessage = "年龄范围为16-100")]
       public int Age { get; set; }
       public ICollection<Course> Courses { get; set; }
   }

 

常用验证如下:

RequiredAttribute:用于验证必需数据字段。
RangeAttribute:用于验证数值字段的值是否在指定的范围之内
StringLengthAttribute:用于验证目标字段的字符串长度是否在指定的范围之内。
MaxLengthAttribute/MinLengthAttribute:用于验证字符/数组字典的长度是否小于/大于指定的上/下限。
CreditCardAttribute 用于验证数据字段值是信用卡号。
EmailAddressAttribute 用于验证电子邮件
PhoneAttribute 用于验证是否为电话格式
UrlAttribute 用于验证是否为Url
KeyAttribute 验证是否唯一
DisplayAttribute 指定显示的字符串
CompareAttribute 提供用于比较两个属性的特性。
特别说明:
在构建实体类的时候,如果不特别指明Key值,这个时候,EFCore会默认将
Id,类名+Id的的属性作为数据表的主键。

数据库架构和实体类不一致的冲突
实体属性不需要存入数据库
给学生类添加一个新的属性 nickname (外号) ,但是这个属性不需要存入数据库,那么只需在nickname上加个NotMapped特性 就不会跟数据表相对应了。

posted @ 2022-07-24 11:30  流氓大菠萝  阅读(310)  评论(0编辑  收藏  举报