动态子验证程序的流利验证返回结果集

时间:2019-01-03 01:32:53

标签: c# entity-framework .net-core dbcontext fluentvalidation

我正在尝试创建一个数据库上下文验证器:我想验证我的实体条目,但是直到运行时我才知道我的验证器:

我的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”并汇总错误消息。

如何直接返回结果?

0 个答案:

没有答案