Rookey.Frame之实体FluentValidation验证
昨天给大家介绍了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验证就介绍到此地,下次介绍其他验证方式,祝大家生活愉快!