/// <summary> /// 检查指定的值对于当前的验证特性是否有效。 /// </summary> /// <param name="value">属性值。</param> /// <param name="validationContext">验证上下文对象。</param> /// <returns></returns> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { Guard.ArgumentNull(validationContext, "validationContext"); var entityType = validationContext.ObjectType; if (ValidateNullable(value) == ValidationResult.Success) { return(ValidationResult.Success); } IDatabase database; try { database = DatabaseFactory.GetDatabaseFromScope(); } catch (UnableGetDatabaseScopeException exp) { return(new ValidationResult(exp.Message)); } var paramaters = new ParameterCollection(); var entity = validationContext.ObjectInstance as IEntity; var syntax = database.Provider.GetService <ISyntaxProvider>(); var eqb = new EntityQueryBuilder(syntax, null, entityType, paramaters); eqb = eqb.Select().Count().From().Where(Property, value); if (entity.EntityState != EntityState.Attached) { foreach (var pk in PropertyUnity.GetPrimaryProperties(entityType)) { eqb = eqb.And(pk, entity.GetValue(pk.Name), QueryOperator.UnEquals); } } var result = database.ExecuteScalar <int>(eqb.ToSqlCommand(), paramaters); return(result == 0 ? ValidationResult.Success : new ValidationResult(FormatErrorMessage(validationContext.DisplayName))); }