Я пытаюсь создать валидатор контекста БД: я хотел бы проверить мои записи сущности, но я не знаю мой валидатор до времени выполнения:
Мой валидатор DbContext выглядит так:
public class DbContextValidator<TContext> : AbstractValidator<TContext>
where TContext: DbContext
{
public DbContextValidator(
EntitySetCollectionValidator<TContext> entitySetCollectionValidator)
{
this.RuleFor(c => c.ChangeTracker.Entries()
.Where(x => (int)x.State > (int)EntityState.Unchanged)
.Select(g => new EntityEntryContextPair<TContext>(g, c)))
.SetCollectionValidator(entitySetCollectionValidator);
}
}
Обычно я бы устанавливал валидатор коллекции напрямую, но так как валидатор коллекции зависит от проверяемой сущности, я не могу этого сделать.Поэтому я создал валидатор, который хотел бы разрешить внутренний валидатор и использовать его для возврата набора результатов:
public class EntitySetCollectionValidator<TContext>
: AbstractValidator<EntityEntryContextPair<TContext>>
where TContext: DbContext
{
protected IValidatorProvider _validatorProvider;
public EntitySetCollectionValidator(IValidatorProvider validatorProvider)
{
this.RuleFor(x => x.EntityEntry).Must(this.BeValid);
}
private bool BeValid(EntityEntryContextPair<TContext> contextPair,
EntityEntry arg)
{
var validator = this._validatorProvider.GetValidatorByEntityType(arg.Entity.GetType());
var results = validator.Validate(contextPair);
return results.IsValid;
}
}
Я бы хотел возвращать результаты FluentValidation вместо возврата логического `results.IsValid', и агрегирование сообщений об ошибках.
Как я могу вернуть результаты напрямую?