Asyn c пользовательская проверка модели представления. Невозможно с ядром. net? Почему? - PullRequest
0 голосов
/ 07 апреля 2020

Я смотрю на эту документацию пример . Это выглядит как полезно. Например, у меня есть следующая модель представления:

class CustomerViewModel
{
    public string Name {get; set;}
    public List<int> Roles {get; set;}
}

Я хотел бы проверить, существуют ли все Roles в моей базе данных. Я пытаюсь что-то вроде:

class CustomerViewModel : IValidatableObject
{
    public string Name {get; set;}
    public List<int> Roles {get; set;}

    public async Task<IEnumerable<ValidationResult>> Validate(ValidationContext validationContext)
    {
        await Task.Delay(123); /// imagine that it's database call

        // and so on
    }

}

И сюрприз! Это невозможно. Это не работает. Потому что нет асин * c версии Validate (Можно ли проверить мою модель в модели? Или мне нужно написать отдельные службы проверки?

1 Ответ

1 голос
/ 07 апреля 2020

конвейер проверки не является асинхронным, поэтому его нельзя использовать для этой цели. Однако это не то, для чего это. Проверка заключается в обеспечении правильности типа и значения, а не бизнес-правил, таких как фактические значения роли. Это должно быть реализовано на уровне вашего бизнеса / данных. Например, если вы используете DDD, агрегат будет применять это при добавлении ролей в коллекцию ролей. Это также может быть то, что применяется в хранилище или службе для типа. Кроме того, в реляционной базе данных это будет реализовано через референциальное ограничение, которое будет пузыриться на вашем уровне данных, например, EF вызывает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...