/// <summary> /// 通过标记的枚举表的值,返回已实现了IDataUnique接口的类 /// </summary> /// <param name="edu">枚举的表</param> /// <returns>返回指定表的验证类</returns> public static ICheckUnique InitDataUnique(EnumDataUnique edu) { //定义ICheckUnique接口变量 ICheckUnique iDataUnique = null; switch (edu) //判断枚举表 { case EnumDataUnique.tb_UsersByCustomer: //验证tb_UsersByCustomer表 iDataUnique = new CheckUniqueByUsersByCustomer(); //初始化CheckUniqueByUsersByCustomer实现类 break; case EnumDataUnique.tb_UsersBySystem: //验证tb_UsersBySystem表 iDataUnique = new CheckUniqueByUsersBySystem(); //初始化CheckUniqueByUsersBySystem实现类 break; case EnumDataUnique.tb_UserByRole: //验证tb_UserByRole表 iDataUnique = new CheckUniqueByUserByRole(); //初始化CheckUniqueByUserByRole实现类 break; case EnumDataUnique.tb_ForumArea: //验证tb_ForumArea表 iDataUnique = new CheckUniqueByForumArea(); //初始化CheckUniqueByForumArea实现类 break; case EnumDataUnique.tb_ForumClassify: //验证tb_ForumClassify表 iDataUnique = new CheckUniqueByForumClassify(); //初始化CheckUniqueByForumClassify实现类 break; } return(iDataUnique); }
} //构造方法 //实现抽象类ValidationAttribute中IsValid方法,该方法用于验证属性值是否有效,Value为验证的值,validationContext为要验证的类 protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value != null) //判断如果value值不为空 { int KeyID = 0; //定义其他条件查询的条件值变量 if (Key != null && Key != "") //如果不为空,则表示需要制定其他条件查询,Key为属性的名称,例如“ID” { //通过反射获取出条件属性的值 KeyID = Convert.ToInt32(validationContext.ObjectInstance.GetType().GetProperty(Key).GetValue(validationContext.ObjectInstance)); } //通过传入表枚举值调用简单工厂模式类的InitDataUnique方法,并返回已实现了ICheckUnique接口的各实现类 ICheckUnique iDataUnique = PublicInitiali.InitDataUnique(edu); //调用实现类中CheckUnique方法,参数分别为要验证的属性值、验证类型和其他条件值。方法实现了对数据库表的数据校验工作 if (iDataUnique.CheckUnique((string)value, MyType, KeyID)) //如果验证成功,则返回true { return(ValidationResult.Success); //返回验证成功 } } return(new ValidationResult(null));//返回验证失败,value值为null }