Entity Framework with MySQL 学习笔记一(验证标签)

直接上代码

    [Table("single_table")]
    public class SingleTable
    {
        [Key]
        public Int32 id { get; set; }
        //refer http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations(v=vs.110).aspx
        [Required]
        [Url]        
        [EmailAddress]
        [RegularExpression("pattern")]
        [MaxLength(1, ErrorMessage = "cant more than 1")]  
        [MinLength(1)]
        [Range(1, 5)]
        [FileExtensions]
        [DataType(DataType.CreditCard)] //还不熟
        [myValidation(ErrorMessage = "xx")] //ErrorMessage是attribute对象公开属性
        public string data { get; set; }    
    }

这些都是default微软提供的基本验证

在 SaveChanges()的时候会触发

也可以在通过entry验证 

bool ok = db.Entry(data).GetValidationResult().IsValid;

string errorMsg = db.Entry(data).GetValidationResult().ValidationErrors.First().ErrorMessage; 

ValidationErrors 是个集合,可能有多个错误。

上面有一个 myValidation 是我们自定义的,来看代码吧 

    public class myValidation : ValidationAttribute
    {       
        public myValidation()
        {
            //init
        }
        //Override ValidationResult
        //object value 是当前的值,可以判断类型来进行不同验证.
        //ValidationContext 里面可以获取当前被验证的entity对象,通过反射应该要拿什么都可以了吧.
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            this.ErrorMessage = "5566"; //这里可以动态拼写errorMsg
            //成功
            return ValidationResult.Success;       
            //失败就返回error msg
            return new ValidationResult(this.ErrorMessageString);
        }
    }

看完注释就应该明白了吧.

还有就是如何捕获异常 

    catch (DbEntityValidationException ex) //用这个class
    {
        //因为 SaveChanges 会同时验证多个实体
        //所以这里可能会有很多哦
        foreach (var eve in ex.EntityValidationErrors)
        {
            //eve可以用entry获取实体
            string className = eve.Entry.Entity.GetType().Name; //eve内有实体
            string state = eve.Entry.State.ToString();  //state added,modified 等
               
            foreach (var ve in eve.ValidationErrors)
            {
                //每个属性和errorMsg
                string attr = ve.PropertyName;
                string errorMsg = ve.ErrorMessage;                       
            }
        }
        throw null;
    }

 

posted @ 2014-11-07 21:21  兴杰  阅读(281)  评论(0)    收藏  举报