/// <inheritdoc /> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (!Unique) { return(ValidationResult.Success); } if (value is null) { return(ValidationResult.Success); } if (validationContext.ObjectInstance is null) { return(ValidationResult.Success); } if (validationContext.TryGetDbContext(out var context)) { var conn = context.Database.GetDbConnection(); ICustomCommand customCommand = null; lock (Queries) { if (Queries.ContainsKey(validationContext.ObjectType)) { customCommand = Queries[validationContext.ObjectType]; } } if (customCommand is null) { customCommand = validationContext.CreateFilteredCountQuery(true, validationContext.MemberName); lock (Queries) { Queries[validationContext.ObjectType] = customCommand; } } if (string.IsNullOrEmpty(customCommand.SqlStatement)) { return(ValidationResult.Success); } if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed) { conn.Open(); } var cmd = customCommand.CreateCommand(conn, validationContext.ObjectInstance); var cnt = Convert.ToInt32(cmd.ExecuteScalar()); if (cnt > 0) { return(new ValidationResult("has already been used", new[] { validationContext.MemberName })); } } return(ValidationResult.Success); }