代码之家  ›  专栏  ›  技术社区  ›  fjompen

服务存储库模式,如何保存具有多个相关实体的多个对象

  •  0
  • fjompen  · 技术社区  · 7 年前

    关系:父项=>子项=>孙子

    为这三家实体分别提供服务和回购。客户端发送一个父级,其中包含要创建并保存在数据库中的子级和孙级。

    这里的“正确”方法是什么?单独处理不同实体的创建意味着我必须为每个父级打开3个到数据库的连接,而在同一个服务/repo中处理所有这些连接则违反了体系结构。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Chris Pratt    7 年前

    这就是工作单元模式概念的由来。您有您的回购,然后您有一个工作类单元,该单元具有每个回购的属性。您注入了您的工作单元,并且可以以事务方式处理您需要的任何事情。

    这在数据库访问中非常常见,事实上,类似于实体框架的ORMs可以为您做到这一点。例如,对于实体框架 DbContext 是您的工作单位 DbSet 上面有一个存储库。您没有提到您的数据库访问方法,但如果您使用的是ORM,这意味着 您不应该也实现存储库/工作单元模式 。这是一个无用的附加层,只是添加了额外的维护和测试问题,没有任何好处。如果您正在使用ADO之类的工具执行直接SQL。NET,则可以使用存储库模式(甚至建议使用),但也应该将其与工作单元模式相结合。您应该启动一个事务,利用所有存储库,然后最终关闭该事务。工作单位需要对所有这些进行管理。