FluentValidation 不适用于不同的库

FluentValidation Doesn't work with different libraries

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

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 不起作用,我可以在 table 中添加没有姓名或姓氏的教师和它不限制它,从 Api 我还可以添加具有 2 个字符名称或没有名称的教师,并将它们添加到数据库中。 所以总而言之,我做错了什么? P.S 在领域层库中我添加了 FluentValidation 的 NugetPackage,在 Presentation 层 Api 我添加了 FluentValidation 的 NugetPackage 和 FluentValidation.aspnetcore

FluentValidation 用于数据验证,但它不同于 Fluent api。它的配置不会为 ef 核心生成约束。

关于这些约束,你可以使用这个流利的api。

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

    }

注意:一个字符的长度在datalength中为2。