应该如何处理存储库模式中的父实体和子实体

本文关键字:实体 模式 存储 何处理 处理 | 更新日期: 2023-09-27 18:05:33

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

我有一个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; }
}

我有以下表格:Images, Tags, ImageTag

现在,我想知道当我在我的ImageRepository调用我的CreateImage方法,我也应该在标签表中创建标签,并在ImageTag表中进行映射吗?

同样,当我调用UpdateImage,我应该检查标签是否已经改变,如果他们有然后在ImageTag表中删除条目并添加不同的(以及可能添加新的标签到标签表)?

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

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

应该如何处理存储库模式中的父实体和子实体

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

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

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

欢呼。