【问题标题】:Data Annotation or Fluent API? Best Practise for supporting various ORM's数据注释还是 Fluent API?支持各种 ORM 的最佳实践
【发布时间】:2018-04-03 10:30:45
【问题描述】:

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

我目前正在研究 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 数组,它使用我想要实现的本地化字符串系统,但我不打算让数据模型检查这一点,而是让数据访问层验证数据.

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

【问题讨论】:

  • 您在寻找这样的东西吗? Validation in EF Core
  • 类似,但它需要使用数据注释才能使用 IValidateObject。数据注释是我想避免使用的东西,所以我可能不得不采取另一种方法。也许使用自定义接口,在模型到达数据库之前直接对模型进行验证。由于我计划允许使用各种 ORM,因此在访问层不使用验证可能更安全...

标签: c# entity-framework-core data-annotations ef-fluent-api object-relational-model


【解决方案1】:

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

  1. 安装 Nuget 包 "dotnet 添加包 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2014-05-15
    • 2011-01-12
    • 2014-08-10
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多