FluentValidator, как валидировать поле при условии, что другое поле уже прошло проверку?
Допустим, что есть такая модель:
class Test
{
public int Id { get; set; }
public Guid Guid { get; set; }
}
Как можно провалидировать св-во Guid, если Id, например, есть в базе данных?
Что я пробовал и что получилось - проверка Id в базе, но как исходя из ответа на валидацию Id сделать валидацию для Guid? Т.е. если Id не прошел валидацию, то Guid не стоит валидировать вообще.
class TestValidator : AbstractValidator<Test>
{
public TestValidator()
{
RuleFor(x => x.Id).MustAsync(CheckIdInDb);
}
private Task<bool> CheckIdInDb(int arg1, CancellationToken arg2)
{
//...check in db
return Task.FromResult(true);
}
}
When не сработает, там простой предикат, да и дважды ходить в базу не хотелось бы.
Ответы (1 шт):
Автор решения: OwDafuq
→ Ссылка
Ответ случайно нашелся тут
Нужно использовать DependentRules, куда и положить проверку поля Guid.
RuleFor(x => x.Id).MustAsync(CheckIdInDb).DependentRules(() => RuleFor(x => x.Guid).NotEmpty());