gpt4 book ai didi

c# - 数据注释 vs Fluent API?支持各种 ORM 的最佳实践

转载 作者:行者123 更新时间:2023-12-05 06:35:40 25 4
gpt4 key购买 nike

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

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

从在线阅读来看,Fluent API 是最佳行动方案,因为它消除了数据层的工作量,并让数据访问层控制和指定有关数据建模方式的具体规则。

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

关于这个问题的更多内容

我有几个类将具有外国文化名称和字符串,并且可以使用 ISO-639 和 ISO-3166 组合通过语言文化字符串来识别它们。 (en-GB, 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 数组,它使用我想实现的本地化字符串系统,但我不打算让数据模型检查这个,而是让数据访问层验证数据.

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

最佳答案

这可能是一个迟到的答案,但您可以使用“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 来验证模型绑定(bind)基础结构传递给 Controller ​​操作的对象。

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

关于c# - 数据注释 vs Fluent API?支持各种 ORM 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com