我已经在几次向某些实体添加新属性时发现了虽然我们在验证逻辑上保持最新(现在只是在服务类中)但是我们错过了更新逻辑在服务类中我们从存储库中检索绑定,并将repo中实体的所有属性设置为模型,然后尝试保存。结果是新字段永远不会被保存,因为我们忘记在更新逻辑中进行分配。
控制器类有一个很好的UpdateModel(模型)方法,它将为您完成所有操作,并确保它获取所有属性。这很好用,但它没有解决额外验证的问题以及服务从回购中获取实体的事实。
在您要使用UpdateModel方法的场景中,想要进行验证并尝试坚持存储库模式的最佳做法是什么。我有目的地遗漏了服务类,因为我不介意放弃它。这似乎是为了它的价值而烦恼。
答案 0 :(得分:3)
您可以在实体类中实现IValidatableObject接口和/或查看模型。
EF 4.1和MVC 3都知道此接口。
MVC将在UpdateModel方法中调用Validate moethod,如果有任何验证错误,它将抛出异常。 MVC甚至会在视图上放置验证错误。 MVC Validation
EF也会在保存插入和更新之前调用此方法。
您可以在Validate方法
中放置所有复杂的验证规则(无法使用数据注释声明)答案 1 :(得分:1)
你有什么理由不能使用与MVC很好地集成的现有数据注释吗?
http://www.scribd.com/doc/55504020/29/Using-MetaData-Partial-Classes-with-Entity-Framework 如果您不想依赖现有的模型绑定来为您设置此信息,那么调用TryUpdateModel将更新您的模型状态,然后您可以使用ModelState.IsValid。
答案 2 :(得分:0)
你看过AutoMapper,它是为了这种事情。