Pregunta

¿Es posible utilizar el atributo selfvalidation con mis validaciones ubicados en un MetadataType? Estoy usando Validación bloque de aplicación de Enterprise Library 5.

¿Fue útil?

Solución

Como he explicado en mi otra respuesta, esto no es apoyado fuera de la caja. Sin embargo, esto se puede lograr mediante la conexión en el marco usando la inyección depedency y sustituir la aplicación AttributeValidatorFactory existente. He escrito un post en mi blog acerca de cómo hacer esto: de mezcla Aplicación de validación Con el bloque DataAnnotation:? ¿Qué pasa con SelfValidation

Espero que esto ayude.

Otros consejos

Esto no es compatible actualmente (fuera de la caja) por VAB. Mire, por ejemplo, en este hilo en el foro EntLib. Creo que la razón principal de esto no está soportado es porque no se puede colocar simplemente el método [SelfValidation] en el tipo de datos meta y esperar que esto funcione. Razón por la que no va a funcionar se debe a que los métodos de validación auto miembros de instancia tendrá típicamente Validate del tipo. La firma del método de validación de uno mismo no contiene el objeto real para validar.

Una obra sencilla alrededor es llamada en el tipo de metadatos de la entidad. Por ejemplo:

[MetadataType(typeof(InvoiceMetaData))]
[HasSelfValidation]
public partial class Invoice
{
    public string Name{ get; set; }

    public int Price { get; set; }

    [SelfValidation]
    public void CustomValidate(ValidationResults results)
    {
        // Call into the meta data class
        InvoiceMetaData.Validate(this, results);
    }
}

public class InvoiceMetaData
{
    [StringLengthValidator(1, 10, Tag = "Name")]
    string Name { get; set; }

    [RangeValidator(0, RangeBoundaryType.Inclusive, 0,
        RangeBoundaryType.Ignore, Tag = "Price")]
    int Price { get; set; }

    public static void CustomValidate(Invoice instance,
        ValidationResults results)
    {
        results.AddResult(new ValidationResult("ErrorMessage1",
            instance, "", "", null));
    }
}

Por supuesto, esto no es una solución muy limpia. VAB sin embargo es muy extensible y la versión 5.0 sólo mejoró. Si se desea se puede intercambiar AttributeValidationFactory existente y reemplazarlo con una versión que es capaz de hacer esto. No será fácil, sin embargo.

Saludos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top