private static void CheckRules( Entity target, RulesContainer rules, BrokenRulesCollection brokenRulesList, ValidatorActions actions, Func <IRule, bool> ruleFilter ) { var list = rules.GetList(true); var ignoreDataSourceValidations = HasAction(actions, ValidatorActions.IgnoreDataSourceValidations); var stopOnFirstBroken = HasAction(actions, ValidatorActions.StopOnFirstBroken); for (int index = 0; index < list.Count; index++) { IRule rule = list[index]; //连接数据源的验证规则可能需要被过滤掉。 if (ignoreDataSourceValidations && rule.ValidationRule.ConnectToDataSource) { continue; } //如果与指定的范围不符合,也需要过滤掉。 if (ruleFilter != null && !ruleFilter(rule)) { continue; } //如果规则不适用于当前实体的状态,则也自动过滤掉。 if (!IsMatchEntityStatus(target, rule.Meta)) { continue; } var args = new RuleArgs(rule); try { args.BrokenDescription = null; rule.ValidationRule.Validate(target, args); } catch (Exception ex) { throw new ValidationException("Properties.Resources.ValidationRulesException" + args.Property.Name + rule.Key, ex); } if (args.IsBroken) { brokenRulesList.Add(rule, args); if (stopOnFirstBroken) { break; } } } }
private static void CheckRules( Entity target, RulesContainer rules, BrokenRulesCollection brokenRulesList, ValidatorActions actions, Func<IRule, bool> ruleFilter ) { var list = rules.GetList(true); var ignoreDataSourceValidations = HasAction(actions, ValidatorActions.IgnoreDataSourceValidations); var stopOnFirstBroken = HasAction(actions, ValidatorActions.StopOnFirstBroken); for (int index = 0; index < list.Count; index++) { IRule rule = list[index]; //连接数据源的验证规则可能需要被过滤掉。 if (ignoreDataSourceValidations && rule.ValidationRule.ConnectToDataSource) { continue; } //如果与指定的范围不符合,也需要过滤掉。 if (ruleFilter != null && !ruleFilter(rule)) { continue; } var args = new RuleArgs(rule); try { args.BrokenDescription = null; rule.ValidationRule.Validate(target, args); } catch (Exception ex) { throw new ValidationException("Properties.Resources.ValidationRulesException" + args.Property.Name + rule.Key, ex); } if (args.IsBroken) { brokenRulesList.Add(rule, args); if (stopOnFirstBroken) { break; } } } }