c# - 使用 EF CodeFirst 和 DRY 原则进行重复验证

标签 c# .net entity-framework validation asp.net-web-api

使用 EF CodeFirst、WebApi 与 DTO 和 Angular(尽管前端选择并不重要):

我将验证放在生成表的类中,例如以下 Required属性以确保该列不为空:

[Required]
public string Name { get; set; }

在WebApi中,我使用DTO,所以在DTO模型上我有与上面完全相同的,这样当模型绑定(bind)时我可以检查ModelState.IsValid .

然后我在客户端进行验证,我对此感到满意。

这是“最佳实践”,还是我违反了前两个的 DRY 原则?


编辑

所以看起来它们主要用于 2 个不同的事情:[1] 用于生成表(在 CodeFirst 中),[2] 用于验证来自客户端的输入。

例如,Required 几乎没有任何意义。 DateTime 上的验证属性字段,因为尝试转换 null 时会出错至DateTime在验证开始之前。

但是,对于字符串,情况有所不同:您需要 Required NOT NULL 的数据库模型上的属性数据库中的字段,但您还需要 Required DTO 字符串字段上的属性,否则保存时将通过验证并出错。

最佳答案

我认为您没有违反 DRY,因为尽管您在两个类中使用相同的符号,但该符号在每个类中用于不同的目的。

如果您发现数据模型中使用的 DTO 与 Web API Controller 中使用的 DTO 相同,则可能需要对两者进行合理化。

关于c# - 使用 EF CodeFirst 和 DRY 原则进行重复验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31613386/

相关文章:

c# - .NET Core 使用哪个 C# 版本?

c# - LINQ - EF 的多个函数参数

c# - 是否可以创建与所用键盘相同的键盘布局?

c# - 使用结构图获取和/或弹出通用接口(interface)的所有实现

.net - 右对齐文本框内的文本

c# - 使用 POCO 模板获取 Entity Framework 的连接字符串

javascript - 加载分页数据时行数性能影响,有什么想法吗?

c# - Json.Net 中的 PreserveReferencesHandling 和 ReferenceLoopHandling 有什么区别?

c# - 我如何在我的 child 中设置对 ForeignKey 的依赖

c# - 调试中的加密操作期间发生错误