【发布时间】: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