首页 > 技术文章 > Rookey.Frame之实体FluentValidation验证

rookey 2016-07-27 08:44 原文

      昨天给大家介绍了Rookey.Frame框架的实体设计,今天继续跟大家分享实体的FluentValidation验证,在Rookey.Frame框架中可以设置多种验证方式:FluentValidation验证、主键字段(PrimaryKeyFields字段)验证、表单字段验证、自定义验证,今天主要介绍FluentValidation验证。

     实体FluentValidation验证需要新建一个实体FluentValidation类,实体验证类命名有要求,命名必须为类名+Validator,并且继承类AbstractValidator<T>,其中T为实体类,以本框架中图标管理实体类为例说明,请看如下代码:

    /// <summary>
    /// 图标管理验证
    /// </summary>
    public class Sys_IconManageValidator : AbstractValidator<Sys_IconManage>
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public Sys_IconManageValidator()
        {
            Expression<Func<Sys_IconManage, bool>> exp = x => !x.StyleClassName.StartsWith("icon-");
            RuleFor(x => x.StyleClassName).Length(5, 30).WithMessage("样式类名字符长度在【5】至【30】之间!");
        }
    }

对于如何写验证表达式可以百度FluentValidation验证,会有很多教程,这里就不再多说。

构造好了实体FluentValidation验证类并设置了验证表达式后,框架会在保存前自动调用FluentValidation验证

针对FluentValidation验证,在Rookey.Frame.Operate.Base\CommonOperate.cs中已经封装了对FluentValidation验证的方法,需要时直接调用即可

        /// <summary>
        /// FluentValidation验证
        /// </summary>
        /// <param name="moduleId">模块Id</param>
        /// <param name="model">实体对象</param>
        /// <returns></returns>
        public static string FluentVerify(Guid moduleId, object model)
        {
            Type modelType = GetModelType(moduleId);
            //FluentValidation验证
            Type fluentValidationType = GetFluentValidationModelType(moduleId);
            if (fluentValidationType != null) //FluentValidation验证类型存在
            {
                //实例化验证对象
                object obj = Activator.CreateInstance(fluentValidationType);
                MethodInfo method = fluentValidationType.GetMethod("Validate", new Type[] { modelType });
                //反射执行方法
                object executedObj = method.Invoke(obj, new object[] { model });
                ValidationResult validateResult = executedObj as ValidationResult;
                if (validateResult != null && !validateResult.IsValid)
                {
                    string errMsg = string.Join(",", validateResult.Errors.Select(x => x.ErrorMessage));
                    return errMsg;
                }
            }
            return string.Empty;
        }

今天FluentValidation验证就介绍到此地,下次介绍其他验证方式,祝大家生活愉快!

推荐阅读