在编辑现有实体时,在哪里验证单个属性?

时间:2014-01-22 20:50:48

标签: c# entity-framework repository-pattern

我正在使用Entity Framework 6和存储库模式,顶部有一个服务层。在我的POCO实体类中,我使用DataAnnotations来满足KeyAttributeRequiredAttribute等基本要求。不过,我在服务层执行特定于业务的验证。例如,我的AccountService使用Insert方法插入新的Account。我会做一些检查,比如一个帐户是否有资格根据某些业务规则等创建。如果它没有资格,那么我会在那里抛出一个验证例外。

我正在尝试解决的问题是什么时候更新现有的Account?我将在哪里对Account的各个属性的更改执行验证?在我的存储库模式实现中,我有一个工作单元对象,其中包含DbContext,工作单元单元只公开我的个人服务(使用DbContext)以及单个{{1方法,只调用SaveChanges的{​​{1}}方法。因此,要更新现有的DbContext,您可以使用服务层获取它,SaveChanges会跟踪它,您可以编辑所需的属性并调用Account。我的服务上没有DbContext方法强制我的库用户通过该方法进行验证。

我应该在哪里进行此类验证?

编辑:我也愿意采用某种方式来制作它,以便需要某种SaveChanges方法,并且获取现有实体不会跟踪Edit中的风格。我认为这可能会使延迟加载和内容等问题复杂化。

1 个答案:

答案 0 :(得分:0)

如果您已在使用DataAnnotations,请查看实施IValidatableObject

这将允许您将扩展验证封装在类中。有一个在this stackoverflow answer

中使用它的例子