2

我正在研究在我的应用程序的数据层上实现一个数据验证表单。我希望在我的数据模型中接受特定的字符串输入,但我很难知道如何最好地实现这一点。

我目前正在研究 Fluent API(目前正在测试 EF Core 风格)是否会促进此功能,或者我是否需要考虑将数据注释引入我的数据层模型以确保可以在所有对象关系建模服务上实现验证。

从在线阅读来看,Fluent API 是最佳的行动方案,因为它从数据层移除工作负载,并让数据访问层控制并指定有关如何建模数据的特定规则。

不利的一面是,我需要为其他 ORM(即:NPoco)重新实现它以满足该平台的规则。

关于这个问题的更多信息

我有几个具有外国文化名称和字符串的类,它们可以通过使用 ISO-639 和 ISO-3166 组合的语言文化字符串来识别。(zh-CN, zh-CN)

这由数据模型中的字符串表示。

public abstract class Alias
{
    public string Culture { get; set; }
}

在 EF Core 下,我使用 OnModelCreating 函数设置表。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    var authorAlias = modelBuilder.Entity<AuthorAlias>();
    authorAlias.Property("Given").IsRequired().IsUnicode();
    authorAlias.Property("Family").IsRequired().IsUnicode();
    authorAlias.Property("Middle").IsUnicode();

    base.OnModelCreating(modelBuilder);
}

我知道 .NET Core 能够下拉一组 CultureInfo,它使用我想要实现的本地化字符串系统,但我不打算让数据模型检查这一点,而是让数据访问层验证数据。

如何确保我的预期逻辑可以在系统中实现?我是否需要更改为数据注释以确保此逻辑?

4

1 回答 1

0

这可能是一个迟到的答案,但您可以使用“Fluent Validation” - 一个流行的 .NET 库,用于构建强类型验证规则。

  1. 安装 Nuget 包“dotnet add package FluentValidation.AspNetCore”

  2. 如下创建一个模型验证器,它扩展“AbstractValidator”并根据需要创建规则。

    public class Employee
    {
        public string Name { get; set; }
        public string EmployeeId { get; set; }
    
    }
    
    public class EmployeeValidator:AbstractValidator<Employee>
    {
        public EmployeeValidator()
        {
            RuleFor(x => x.Name).NotEmpty().WithMessage("Employee Name can not be 
                    empty");
    
            RuleFor(x => x.EmployeeId).NotEmpty();  
        }
    }
    
  3. FluentValidation 支持与 ASP.NET Core 2.1 或 3.1(推荐 3.1)集成。一旦启用,MVC 将使用 FluentValidation 来验证模型绑定基础结构传递给控制器​​操作的对象。

有关如何将其用于 ASP.NET CORE 的更多信息,请参见此处 - https://docs.fluentvalidation.net/en/latest/aspnet.html

于 2021-01-24T17:15:51.633 回答