c# - 您应该如何处理存储库模式中的父实体和子实体?

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

我正在制作一个图片网站,我想知道我应该如何在我的 Linq to Sql 存储库中构造创建/更新方法?

我有一个结构如下的照片实体:

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 表中创建 Tags 并在 ImageTag 表中进行映射?

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

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

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

最佳答案

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

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

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

干杯。

关于c# - 您应该如何处理存储库模式中的父实体和子实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047578/

相关文章:

c# - 如何在不使用外部视频文件的情况下播放文件

c# - 2 外键作为主键使用 EF Core 2.0 Code First

c# - 如何不允许用户在文本框中输入数字

c# - Linq 到 SQL : Why am I getting IDENTITY_INSERT errors?

c# - Linq To Sql 左外连接 - 过滤空结果

c# - 具有多个实体的存储库创建 DTO

Android 存储库模式将 room 转换为域模型

c# - 如何使用键盘快捷键组合运行 WinForms 应用程序?

c# - Linq-to-SQL:组合(或运算)多个 "Contains"过滤器?

c# - 针对慢速分组的 LINQ 查询优化