Question

Est-il possible d'utiliser l'attribut selfvalidation avec mes situés dans une validation metadatatype? J'utilise la validation de la bibliothèque Enterprise 5 Application Block.

Était-ce utile?

La solution

Comme je l'ai expliqué dans mon autre réponse, ce n'est pas pris en charge hors de la boîte. Cependant, cela peut être réalisé par accrochage dans le cadre par injection de depedency et remplacer la mise en œuvre de AttributeValidatorFactory existante. J'écrit un post sur mon blog sur la façon de le faire: mélange Application Validation Avec bloc DataAnnotation: Qu'en est-SelfValidation

J'espère que cette aide.

Autres conseils

actuellement pas pris en charge (hors de la boîte) par VAB. Regardez par exemple ce fil au forum EntLib. Je pense que la principale raison pour laquelle ce n'est pas pris en charge est parce que vous ne pouvez pas simplement placer la méthode [de SelfValidation] sur le méta type de données et attendre à ce que le travail. Raison, il ne fonctionnera pas parce que les méthodes d'auto de validation seront généralement les membres d'instance validate du type. La signature de la méthode d'auto-validation ne contient pas l'objet réel pour valider.

Un travail simple autour de l'appel dans le type de données méta de l'entité. Par exemple:

[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));
    }
}

Ce n'est évidemment pas une solution très propre. VAB est cependant très extensible et la version 5.0 ne se sont améliorées. Si vous voulez, vous pouvez échanger existant AttributeValidationFactory et le remplacer par une version qui est capable de le faire. Il ne sera pas facile cependant.

Vive

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top