Как мне создать собственный валидатор в VAB, который проверяет сразу два свойства?

В моей базе данных у меня есть ограничение составного уникального ключа (CustomerId, Name) для объекта. Я хочу проверить, соблюдается ли уникальное ограничение, прежде чем отправлять изменения в базу данных. Пользователь может настроить атрибут Name для объекта, поэтому я хотел бы создать настраиваемый валидатор, который проверяет свойство name, но при этом мне также нужен доступ к свойству CustomerId. Как мне это сделать?

Я использую WCSF, что означает, что я застрял в Entlib 3.1 и включенном VAB, но я думаю, что можно переключиться на VAB EntLib 4.1, не нарушая WCSF.

С уважением, Эгиль.


person Egil Hansen    schedule 06.12.2008    source источник


Ответы (1)


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

[HasSelfValidation]
public class MyEntity
{
    public int CustomerId { get; set; }
    public string Name { get; set; }

    [SelfValidation]
    public void ValidateRange(ValidationResults results)
    {
        bool isUnique = [query the database here]

        if (!isUnique)
        {
            results.AddResult(new ValidationResult(
                "CustomerId and Name are not unique", this, "", "", null));
        }
    }
}

Я должен сказать, что не знаком с набором функций VAB 3.1, поэтому я не уверен на 100%, что это работает на 3.1. Хотя он работает на 4.1. Если вам не нравится самопроверка, вы также можете написать собственный валидатор и подключить его в файле конфигурации. Взгляните на этот ответ о переполнении стека для получения дополнительной информации о том, как это сделать.

person Steven    schedule 19.02.2010