【发布时间】:2013-05-23 23:28:21
【问题描述】:
我正在为我的 mvc4 网站使用通用存储库和工作单元模式。
现在我有一种情况,我想删除我系统的一个用户。 在删除代码中,我必须删除其他表中的一些条目(cmets、accessrights、..)。
最简单的解决方案是创建一个UserRepository,它继承自GenericRepository<User>,并修改delete方法删除其他表中的数据。但这意味着我的UserRepository 可以访问其他表,这些表应该有自己的存储库类,对吧?
我读过一个服务层,它位于我的业务逻辑和我的存储库之间。
这里的最佳实践是什么?服务层的实现如何?
如果我使用服务层或者我应该只有通用存储库并在服务类中执行我的逻辑,是否仍然需要自定义实现的存储库,例如 UserRepository?
示例代码:
class UserRepository
{
public void Delete(User entity)
{
var userComments = Context.UserComments.Get(comment => comment.UserId == entity.Id);
foreach (var comment in userComments)
{
Context.UserComments.Remove(comment);
}
//
// same for access rights here
//
Context.Users.Remove(entity);
}
}
【问题讨论】:
-
避免手动执行此操作的一种方法是利用 CASCADE DELETE...(查看映射中的 .WillCascadeOnDelete())
-
删除代码只是一个例子,我有更多的查询可以访问多个表,例如用于为用户返回报告数据。
标签: c# asp.net-mvc-4 repository-pattern