Entity Framework Complex Type Custom Validation, Stopping Validation Recursion

Мы используем сложные типы для управления нашими переводимыми полями, например:

[ComplexType]
public class Translated
{
    [Required]
    public string NL { get; set; }

    [Required]
    public string EN { get; set; }

    [ScaffoldColumn(false)]
    public string TranslatedText
    {
        get
        {
           return Util.Translate(NL, EN); 
        }
    }
}

Мы требуем, чтобы поля присутствовали. Но в некоторых случаях все поле Translated является необязательным, как в:

public class Question
{
    ...

    [Optional(ErrorMessage="Foo")]
    public Translated Description { get; set; }

    ...
}

Однако кажется, что атрибут Optional вычисляется, и когда он возвращает false, с результатом ничего не происходит.

class OptionalAttribute : ValidationAttribute 
{
    public override bool IsValid(object value)
    {
        return false;
    }
}

Когда я помещаю необязательный атрибут в не сложный тип, он работает, как ожидалось, сообщение об ошибке всегда будет Foo.

Конечная цель - позволить описанию быть пустым в обоих случаях, но когда одно из полей заполнено, ошибки, конечно, должны распространяться.

Остановка рекурсии проверки приведет к тому, что поле станет необязательным, но это также предотвратит проверку полей в случае, если они заполнены.

Есть идеи, как это сделать?

5
задан Alessandro Vermeulen 16 April 2011 в 19:20
поделиться