zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    hbase scan超时问题
    hadoop的shuffle和排序
    MapReduce作业的调度
    hadoop hdfs问题集锦
    JVM--双亲委派机制
    springboot快速搭建
    CircleView
    TabHost实现底部导航栏
    GridView的stretchMode属性
    Android直连SQL Server数据库
  • 原文地址:https://www.cnblogs.com/keatkeat/p/4082354.html
Copyright © 2011-2022 走看看