Nei*_*ury 7 c# validation entity-framework asp.net-web-api
我正在使用ASP.Net Web API和Code First Entity Framework,从我所读到的,你通常应该直接在你的动作方法中暴露DTO对象而不是实体对象(根据http://www.asp. net/web-api/overview/data/using-web-api-with-entity-framework/part-5).
因此,在我正在研究的一个案例中,为了避免上面链接中描述的"过度发布"问题,我创建了一个DTO对象,其中几乎所有属性都与模型对象相同.我想知道的是,我是否需要为DTO和模型属性复制所有相同的验证属性集(例如[必需],[范围(N,M)]等?最初我希望不是to(避免重复)但如果你想利用绑定验证(即ModelState.IsValid),你需要DTO上的验证属性,如果你想用适当的约束创建数据库,你需要在主模型上([必需] ] - > not null等)
有没有更好的方法?
此外,是否有一些Entity确实使用的属性,但模型绑定验证不使用?例如,虽然[Range(n,m)]将明显影响某些客户端输入的验证,但实体是否完全关心它(它似乎不会影响我所知道的创建的DB模式?)
实体应该只具有实际对数据库产生影响的属性.DTO不应具有任何验证属性,除了DataMemberAttribute以定义是否需要属性以及它应以何种顺序显示等.对于OData,您还必须设置KeyAttribute.模型应具有验证属性.因为DTO和模型可能几乎相同,所以您需要为每个需要验证模型的dto创建,并将dto的值交换到模型的对象.现在您可以验证它,如果您没有对模型使用ValidationAttributes,您可以验证它们,例如使用FluentValidation
长话短说:
实体仅获取实际影响数据库模式的属性
DTO是简单的对象,除了DataMemberAttribute之外没有验证逻辑
模型应具有验证属性(仅在需要时,在使用FluentValidation时不需要)
POST的工作流程将是: - > DTO进入 - >交换到模型 - >验证模型 - >交换模型到实体 - >在数据库中存储实体 - >使用更新的实体并将其交换到新的dto - >返回dto
问候,Voltaic
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |