C# 使用fluent验证预验证唯一名称有什么好处?

C# 使用fluent验证预验证唯一名称有什么好处?,c#,asp.net-core,fluentvalidation,mediatr,C#,Asp.net Core,Fluentvalidation,Mediatr,在我的aspnet core 3.1应用程序中,我使用MediatR模式和fluent验证。我正在检查项目名称的唯一性。我可以使用这种方法进行验证。它们都很好用 第一个场景 在IRequestHandler内部验证 if (await _context.Projects.Where(x => x.Name.ToLower() == request.Name.ToLower()) .AnyAsync(cancellationToken: cancel

在我的aspnet core 3.1应用程序中,我使用MediatR模式和fluent验证。我正在检查项目名称的唯一性。我可以使用这种方法进行验证。它们都很好用

第一个场景

在IRequestHandler内部验证

 if (await _context.Projects.Where(x => x.Name.ToLower() == request.Name.ToLower())
                    .AnyAsync(cancellationToken: cancellationToken)) throw new BadRequestException($"{request.Name.ToLower()} already exists"); 
    public class CommandValidator : AbstractValidator<Command>
    {
        private readonly DataContext _context;

        public CommandValidator(DataContext context)
        {
            _context = context;
            RuleFor(x => x.Name).NotNull().NotEmpty().WithMessage("Please specify project 
                name").AlphaNumeric()
               .MustAsync(BeUniqueTitle).WithMessage("Project name already exists");
        }

        private async Task<bool> BeUniqueTitle(string title, CancellationToken cancellationToken)
        {
            return await _context.Projects.AllAsync(l => l.Name != title.ToLower(), cancellationToken: cancellationToken);
        }
        
    }
第二种情景

在内部验证AbstractValidator

 if (await _context.Projects.Where(x => x.Name.ToLower() == request.Name.ToLower())
                    .AnyAsync(cancellationToken: cancellationToken)) throw new BadRequestException($"{request.Name.ToLower()} already exists"); 
    public class CommandValidator : AbstractValidator<Command>
    {
        private readonly DataContext _context;

        public CommandValidator(DataContext context)
        {
            _context = context;
            RuleFor(x => x.Name).NotNull().NotEmpty().WithMessage("Please specify project 
                name").AlphaNumeric()
               .MustAsync(BeUniqueTitle).WithMessage("Project name already exists");
        }

        private async Task<bool> BeUniqueTitle(string title, CancellationToken cancellationToken)
        {
            return await _context.Projects.AllAsync(l => l.Name != title.ToLower(), cancellationToken: cancellationToken);
        }
        
    }
公共类CommandValidator:AbstractValidator
{
私有只读数据上下文_上下文;
公共CommandValidator(DataContext上下文)
{
_上下文=上下文;
RuleFor(x=>x.Name).NotNull().NotEmpty().WithMessage(“请指定项目
名称“)。字母数字()
.MustAsync(BeUniqueTitle).WithMessage(“项目名称已存在”);
}
私有异步任务遗留唯一标题(字符串标题、CancellationToken CancellationToken)
{
return wait _context.Projects.AllAsync(l=>l.Name!=title.ToLower(),cancellationToken:cancellationToken);
}
}
我的问题是,他们都在检查db和性能,我在postman中测试的结果几乎相同(检查时间)。我应该遵循哪种方法?建议使用哪一种