【问题标题】:How should you handle parent and child entities in the repository pattern?您应该如何处理存储库模式中的父实体和子实体?
【发布时间】:2011-10-26 05:30:56
【问题描述】:

我正在制作一个图片网站,我想知道如何在我的 Linq to Sql 存储库中构建 Create/Update 方法?

我有一个 Photo 实体,其结构如下:

public class Image
{
    public int ID { get; set; }
    public int OwnerId { get; set; }
    public string Url { get; set; }
    public IEnumerable<Tag> Tags { get; set; }
}

我有以下表格:图像、标签、ImageTag

现在,我想知道当我在 ImageRepository 中调用 CreateImage 方法时,我是否还应该在 Tags 表中创建标签并在 ImageTag 表中进行映射?

同样,当我调用 UpdateImage 时,我是否应该检查标签是否已更改,以及它们是否已删除 ImageTag 表中的条目并添加不同的条目(以及可能向标签表添加新标签)?

或者这两个用例都应该发生在单独的存储库调用中吗?

基本上,在典型的 linq to sql 存储库中通常如何处理这种父/子、一对多关系?

【问题讨论】:

    标签: c# linq-to-sql repository-pattern


    【解决方案1】:

    我想说理解模型中实体之间的关系不是存储库的责任。毕竟,如果您要更改持久化数据的方式(例如更改为 no-sql 解决方案,或者即使您只是更改 db 架构),您的实体和模型也不应该更改。

    因此,最好的办法是使用单独的存储库调用,并将调用封装在一个工作单元中。 (Unit of Work 基本上是一个抽象的事务)。

    您的工作单元和对存储库的各种调用将是存储库之上的抽象层。我不知道您模型的其余部分,因此可能会有所不同。它可能是 Image 对象上的一个方法。你可以有一个Mediator。或者,如果您是从 DDD 的角度来处理这个问题,则可以使用域服务。

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2015-02-21
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      相关资源
      最近更新 更多