C# FluentValidation使用DB检查重复值

C# FluentValidation使用DB检查重复值,c#,asp.net,asp.net-core,razor-pages,fluentvalidation,C#,Asp.net,Asp.net Core,Razor Pages,Fluentvalidation,我试图确保用户输入的名称不能与数据库中的名称相同 如何使用Fluent验证来实现这一点 我试过了,但还是出了一些差错 这是我当前的代码: RuleFor (x => x.Name) .NotEmpty().WithMessage("The name cannot be empty!"); (用户)数据库的示例如下: 姓名、年龄 名称不应重复。在引用的链接中,它们提供了合适的解决方案。但是,我建议您使用设计模式(如存储库模式)和原则(如依赖项注入)。执行所需验证(无重复名称)的一种方法是:

我试图确保用户输入的名称不能与数据库中的名称相同

如何使用Fluent验证来实现这一点

我试过了,但还是出了一些差错

这是我当前的代码:

RuleFor
(x => x.Name)
.NotEmpty().WithMessage("The name cannot be empty!");
(用户)数据库的示例如下:

姓名、年龄


名称不应重复。

在引用的链接中,它们提供了合适的解决方案。但是,我建议您使用设计模式(如存储库模式)和原则(如依赖项注入)。执行所需验证(无重复名称)的一种方法是:

  • 定义存储库接口和从数据库获取数据的方法:

    public interface IMyClassToValidateRepository {
        Task<IList<MyClassToValidate>> GetDataAsync();
    }
    

    您的错误是什么?@fatemimirjalili我得到的错误来自这行var business=new RoleGroupBusiness();由于我不确定代码背后的内容,我无法继续。此行是一个表名,用于检查重复项。您可以使用您的
    上下文.tableName
    ,然后对其使用
    where
    public class MyClassToValidateValidator : AbstractValidator<MyClassToValidate> {
        public MyClassToValidateValidator(IMyClassToValidateRepository repository) {
            RuleFor(x => x.Name)
                .MustAsync(async (name, ct) => 
                    (await repository.GetDataAsync()).All(x => x.Name != name));
        }
    }
    
    public class MyClassToValidate {
        public string Name { get; set; }
    }