使用EF CodeFirst&amp ;;重复验证干旱原则

时间:2015-07-24 14:40:00

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

使用EF CodeFirst,WebApi与DTO和Angular(虽然前端选择并不重要):

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

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

在WebApi中,我使用DTO,所以在DTO模型上我与上面的完全相同,因此当模型绑定时我可以检查ModelState.IsValid

然后我在客户端进行验证,我很满意。

这是"最佳实践",还是我违反DRY原则与前两个?

修改

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

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

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

3 个答案:

答案 0 :(得分:2)

我认为你没有违反DRY,因为虽然你在两个班级中都使用相同的符号,但这个符号在每个班级中用于不同的目的。

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

答案 1 :(得分:1)

恕我直言应用程序中的每一层都应检查其处理数据的有效性。

您是否也将该属性标记为数据库中的可空列?

不,你没有违反DRY原则。

答案 2 :(得分:0)

看看这个解决方案,模仿模型之间的属性副本:http://patrickdesjardins.com/blog/how-to-automap-asp-net-attribute-from-model-to-viewmodel