【问题标题】:FluentValidation Doesn't work with different librariesFluentValidation 不适用于不同的库
【发布时间】:2021-02-04 16:20:19
【问题描述】:

所以,我想构建一个使用 FluentValidation 的具有简洁架构的简单项目。在 My Domain 层(有自己的库)中,我有 Teacher 类和 TeacherAnnotation 类,如下所示:

public class Teacher
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Lastname { get; set; }
}

    public class TeacherAnnotation : AbstractValidator<Teacher>
{
    public TeacherAnnotation()
    {
        RuleFor(x => x.Name).NotEmpty().MinimumLength(3).MaximumLength(50);
        RuleFor(x => x.Lastname).NotEmpty().MinimumLength(3).MaximumLength(50);
    }
}

在表示层(这是一个不同的库)中,在我的 Main Api 中,在启动时我添加了以下内容:

services.AddControllers().AddFluentValidation();
services.AddTransient<IValidator<Teacher>, TeacherAnnotation>();

在我的数据层(这是一个不同的库)中,我运行我的迁移(我将我的数据库逻辑和迁移保留在那里)。 问题是,当我添加迁移“初始”和更新数据库时,一切都运行良好,但是 FluentAnnotation 不起作用,我可以在没有姓名或姓氏的表中添加教师,并且它不限制它,来自 Api我还可以添加具有 2 个字符名称或没有名称的教师,并将它们添加到数据库中。 所以一句话,我做错了什么? P.S 在域层库中我添加了 FluentValidation 的 NugetPackage,在 Presentation Layer Api 中我添加了 FluentValidation 和 FluentValidation.aspnetcore 的 NugetPackage

【问题讨论】:

    标签: c# asp.net-core asp.net-web-api fluentvalidation clean-architecture


    【解决方案1】:

    FluentValidation 用于数据验证,但与 Fluent api 不同。它的配置不会对 ef core 产生约束。

    关于这些约束,你可以使用这个fluent api。

     protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            
            modelBuilder.Entity<Teacher>()
                .HasCheckConstraint("CK_Teacher_Name", "datalength([Name])>6 And datalength([Name])<100")
                .Property("Name")
                .IsRequired();
    
        }
    

    注意:一个字符的长度是数据长度中的2。

    【讨论】:

    • 我不太明白,我只需要使用 Data Annotations [required] [key] 等的替代方法,为此我想使用流利的验证来分隔我的文件,但是当我将我的信息放在不同的库中它不起作用。所以你是说如果我使用不同的库我应该像你展示的那样编写我的代码,并删除我所有的流利注释代码?
    • @givexa,FluentValidation不涉及ef核心约束,需要使用fluent api或者注解生成约束。
    • 哦,非常感谢它的工作,所以总结一下 Fluent Api 用于检查数据库(在 sql 中),如果有什么不对它不会添加到数据库中,但是 fluentvalidation 有什么作用?它用于前端还是什么?
    • 不客气,这是关于 fluentvalidation 的官方解释:'一个用于 .NET 的小型验证库,它使用 fluent 接口和 lambda 表达式来构建验证规则。类似于模型验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多