Это в настоящее время не поддерживается (из коробки) VAB.Посмотрите, например, на эту тему на форуме EntLib.Я думаю, что основная причина, по которой это не поддерживается, заключается в том, что вы не можете просто поместить метод [SelfValidation] в тип метаданных и ожидать, что это сработает.Причина, по которой это не сработает, заключается в том, что методы самопроверки обычно проверяют элементы экземпляра типа.Подпись метода самопроверки не содержит фактического объекта для проверки.
Простой обходной путь - обращение к метаданному типу из сущности.Например:
[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));
}
}
Это, конечно, не очень чистое решение.VAB, однако, очень расширяемый, и версия 5.0 только стала лучше.Если вы хотите, вы можете заменить существующий AttributeValidationFactory
и заменить его версией, которая может это сделать.Это будет нелегко.
Приветствия