我正在使用Entity Framework 6
和存储库模式,顶部有一个服务层。在我的POCO实体类中,我使用DataAnnotations
来满足KeyAttribute
和RequiredAttribute
等基本要求。不过,我在服务层执行特定于业务的验证。例如,我的AccountService
使用Insert
方法插入新的Account
。我会做一些检查,比如一个帐户是否有资格根据某些业务规则等创建。如果它没有资格,那么我会在那里抛出一个验证例外。
我正在尝试解决的问题是什么时候更新现有的Account
?我将在哪里对Account
的各个属性的更改执行验证?在我的存储库模式实现中,我有一个工作单元对象,其中包含DbContext
,工作单元单元只公开我的个人服务(使用DbContext
)以及单个{{1方法,只调用SaveChanges
的{{1}}方法。因此,要更新现有的DbContext
,您可以使用服务层获取它,SaveChanges
会跟踪它,您可以编辑所需的属性并调用Account
。我的服务上没有DbContext
方法强制我的库用户通过该方法进行验证。
我应该在哪里进行此类验证?
编辑:我也愿意采用某种方式来制作它,以便需要某种SaveChanges
方法,并且获取现有实体不会跟踪Edit
中的风格。我认为这可能会使延迟加载和内容等问题复杂化。
答案 0 :(得分:0)
如果您已在使用DataAnnotations,请查看实施IValidatableObject
这将允许您将扩展验证封装在类中。有一个在this stackoverflow answer
中使用它的例子